-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfcalc
executable file
·86 lines (69 loc) · 1005 Bytes
/
fcalc
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/perl
#use warnings;
use strict;
use Getopt::Long;
use fralib;
use POSIX qw(ceil floor);
use File::Path;
use Pod::Usage;
for my $n (0..200)
{
my $a = ncr(2*$n, $n);
my $b = 0;
for my $x (0..$n)
{
my $j = ncr($n, $x);
$b += $j*$j;
}
print "$n)$a\t$b\n";
}
exit;
print "ncr(3,1) = " . ncr(3,1) . "\n";
print "ncr(10,1) = " . ncr(10,1) . "\n";
print "ncr(10,9) = " . ncr(10,9) . "\n";
print "ncr(-3,1) = " . ncr(-3,1) . "\n";
my $p = 1/90;
my $q = 1- $p;
my $n = 60;
my $a = 0;
for my $k (0..4)
{
$a += ncr($n,$k)*$p**$k*$q**($n-$k);
}
my $gte5 = 1-$a;
my $newyork = 5 * 62 * $gte5;
my $USA = 10 * 50 * 5 * 62 * $gte5;
print <<STUFF;
<5 : $a
>=5 : $gte5
new york : $newyork
usa : $USA
STUFF
sub ncr
{
my ($n, $r) = @_;
if ($r==0)
{
return 1;
}
elsif ($n<=0)
{
return 0;
}
elsif ($r<0)
{
return 0;
}
elsif ($r>$n)
{
return 0;
}
elsif ($r > $n-$r)
{
return ncr($n,$n-$r);
}
else
{
return ($n/$r) * ncr($n-1, $r-1);
}
}