#-*-Mode: perl;-*- eval "\$opt_$1=\$2" while $ARGV[0] =~ /^(\w+)=(.*)/ && shift; $k = $opt_k; $N = $opt_N; $p = $opt_p; print "N, number of possible events: $N\n"; print "k, number of events of the type we're interested in: $k\n"; print "p, probability of event type k: $p\n"; print "probability of getting exactly $k events: ", &binomial($N, $k, $p), "\n"; print "probability of getting $k or more events: ", &cumBinomial($N, $k, $p), "\n"; sub binomial { local($N, $k, $p) = @_; local($q) = 1 - $p; &binomCoeff($N, $k) * ($p ** $k) * ($q ** ($N - $k)); } sub cumBinomial { local($N, $k, $p) = @_; local($sum) = &binomial($N, $k, $p); while ($k < $N) { $k++; $sum += &binomial($N, $k, $p); } $sum; } sub binomCoeff { local($N, $k) = @_; &fact($N) / (&fact($k) * &fact($N - $k)); } sub fact { local($N) = @_; if (!$N) {return 1;} else {$N * &fact($N - 1);} }