Evaluate binomial coefficients: Difference between revisions
Content added Content deleted
(→{{header|Icon}} and {{header|Unicon}}: {{Out}}) |
(Add Seed7 example) |
||
Line 1,373: | Line 1,373: | ||
=={{header|Seed7}}== |
=={{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"; |
<lang seed7>$ include "seed7_05.s7i"; |
||
const |
const proc: main is func |
||
⚫ | |||
⚫ | |||
local |
local |
||
var integer: |
var integer: n is 0; |
||
⚫ | |||
begin |
begin |
||
for n range 0 to 66 do |
|||
for k range 0 to n do |
|||
write(n ! k <& " "); |
|||
end |
end for; |
||
writeln; |
|||
end for; |
|||
⚫ | |||
⚫ | |||
⚫ | |||
binomial := binomial div l; |
|||
⚫ | |||
⚫ | |||
⚫ | |||
const proc: main is func |
|||
⚫ | |||
writeln("binomial coefficient of (5, 3) is " <& binomial(5, 3)); |
|||
end func;</lang> |
end func;</lang> |
||
{{Out}} |
{{Out}} |
||
<pre> |
<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> |
</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 |
|||
⚫ | |||
var bigInteger: binom is 0_; |
|||
local |
|||
var bigInteger: numerator is 0_; |
|||
var bigInteger: denominator is 0_; |
|||
⚫ | |||
if n >= 0_ and k > n >> 1 then |
|||
⚫ | |||
⚫ | |||
if k < 0_ then |
|||
binom := 0_; |
|||
elsif k = 0_ then |
|||
binom := 1_; |
|||
else |
|||
binom := n; |
|||
numerator := pred(n); |
|||
denominator := 2_; |
|||
⚫ | |||
binom *:= numerator; |
|||
binom := binom div denominator; |
|||
decr(numerator); |
|||
⚫ | |||
⚫ | |||
end if; |
|||
⚫ | |||
</lang> |
|||
Original source [http://seed7.sourceforge.net/algorith/math.htm#binomial_coefficient]. |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |