Jump to content

Evaluate binomial coefficients: Difference between revisions

Add Seed7 example
(Add Seed7 example)
Line 1,373:
 
=={{header|Seed7}}==
The infix operator [http://seed7.sourceforge.net/libraries/integer.htm#%28in_integer%29!%28in_integer%29 !] computes the binomial coefficient.
E.g.: <tt>5 ! 3</tt> evaluates to 10. The binomial coefficient operator works also for negative values of n.
E.g.: <tt>(-6) ! 10</tt> evaluates to 3003.
 
<lang seed7>$ include "seed7_05.s7i";
 
const func integer: binomial (in integer: n, in var integerproc: k)main is func
result
var integer: binomial is 0;
local
var integer: ln is 0;
var integer: binomialk is 0;
begin
iffor n >=range k0 thento 66 do
iffor k >range n0 -to kn thendo
k := write(n -! k; <& #" Optimization");
end iffor;
binomial := 1writeln;
end l := 0for;
while l < k do
binomial *:= n - l;
incr(l);
binomial := binomial div l;
end while;
end if;
end func;
 
const proc: main is func
begin
writeln("binomial coefficient of (5, 3) is " <& binomial(5, 3));
end func;</lang>
 
{{Out}}
<pre>
1
binomial coefficient of (5, 3) is 10
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1
1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1
1 16 120 560 1820 4368 8008 11440 12870 11440 8008 4368 1820 560 120 16 1
1 17 136 680 2380 6188 12376 19448 24310 24310 19448 12376 6188 2380 680 136 17 1
1 18 153 816 3060 8568 18564 31824 43758 48620 43758 31824 18564 8568 3060 816 153 18 1
1 19 171 969 3876 11628 27132 50388 75582 92378 92378 75582 50388 27132 11628 3876 969 171 19 1
1 20 190 1140 4845 15504 38760 77520 125970 167960 184756 167960 125970 77520 38760 15504 4845 1140 190 20 1
...
</pre>
 
The library [http://seed7.sourceforge.net/libraries/bigint.htm bigint.s7i] contains a definition of the binomial coefficient operator
[http://seed7.sourceforge.net/libraries/bigint.htm#%28in_bigInteger%29!%28in_var_bigInteger%29 !]
for the type [http://seed7.sourceforge.net/manual/types.htm#bigInteger bigInteger]:
 
<lang seed7>const func bigInteger: (in bigInteger: n) ! (in var bigInteger: k) is func
result
var bigInteger: binom is 0_;
local
var bigInteger: numerator is 0_;
var bigInteger: denominator is 0_;
begin
if n >= 0_ and k > n >> 1 then
k binomial *:= n - lk;
end if;
if k < 0_ then
binom := 0_;
elsif k = 0_ then
binom := 1_;
else
binom := n;
numerator := pred(n);
denominator := 2_;
while ldenominator <= k do
binom *:= numerator;
binom := binom div denominator;
decr(numerator);
incr(ldenominator);
end while;
end if;
end func;
</lang>
 
Original source [http://seed7.sourceforge.net/algorith/math.htm#binomial_coefficient].
 
=={{header|Tcl}}==
Cookies help us deliver our services. By using our services, you agree to our use of cookies.