47 lines
924 B
C++
47 lines
924 B
C++
#include "fcpp.hh"
|
|
|
|
unsigned int x = 93267;
|
|
|
|
unsigned int zufall ()
|
|
{
|
|
unsigned int ia = 16807, im = 2147483647;
|
|
unsigned int iq = 127773, ir = 2836;
|
|
unsigned int k;
|
|
|
|
k = x/iq; // LCG xneu=(a*xalt) mod m
|
|
x = ia*(x-k*iq)-ir*k; // a = 7^5, m = 2^31-1
|
|
if (x<0) x = x+im; // keine lange Arithmetik
|
|
return x; // s. Numerical Recipes
|
|
} // in C, Kap. 7.
|
|
|
|
unsigned int ggT (unsigned int a, unsigned int b)
|
|
{
|
|
if (b==0) return a;
|
|
else return ggT(b,a%b);
|
|
}
|
|
|
|
int experiment ()
|
|
{
|
|
unsigned int x1,x2;
|
|
|
|
x1 = zufall(); x2 = zufall();
|
|
if (ggT(x1,x2)==1)
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
double montecarlo (int N)
|
|
{
|
|
int erfolgreich=0;
|
|
|
|
for (int i=0; i<N; i=i+1)
|
|
erfolgreich = erfolgreich+experiment();
|
|
|
|
return ((double)erfolgreich)/((double)N);
|
|
}
|
|
|
|
int main (int argc, char** argv) {
|
|
print(sqrt(6.0/montecarlo(readarg_int(argc,argv,1))));
|
|
}
|