blob: 263b312478f85fd50afdd549bb48c2da3b104d08 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#!/usr/bin/perl
#!/data/data/com.termux/files/usr/bin/perl
if (grep(/^$ARGV[0]$/, ('h', '-h', '--help'))) {
print "m.pl MAX_VALUE TOTAL_PAIRS\n";
exit;
}
($max_val, $total) = (shift // 120, shift // 500);
print "PI estimate: " . est_pi($max_val, $total) . " with $total numbers between 0 and $max_val.\n";
sub est_pi($$) {
my ($MAX_VAL, $TOTAL) = @_;
my $total_coprime;
foreach (1 .. $TOTAL) {
my $gcd = gcd_iter(rnd_int($MAX_VAL), rnd_int($MAX_VAL));
$total_coprime += ($gcd == 1);
}
return sqrt(6/($total_coprime/$TOTAL));
}
sub rnd_int($) {
return int(rand(shift) + 0.5);
}
sub gcd_iter($$) {
my ($u, $v) = @_;
while ($v) {
($u, $v) = ($v, $u % $v);
}
return abs($u);
}
|