Evaluate binomial coefficients: Difference between revisions
Content added Content deleted
m (Phix/mpfr) |
(Added Wren) |
||
Line 2,688: | Line 2,688: | ||
{{Out}} |
{{Out}} |
||
<pre>the binomial coefficient of 5 and 3 = 10</pre> |
<pre>the binomial coefficient of 5 and 3 = 10</pre> |
||
=={{header|Wren}}== |
|||
{{libheader|Wren-fmt}} |
|||
{{libheader|Wren-math}} |
|||
<lang ecmascript>import "/fmt" for Fmt |
|||
import "/math" for Int |
|||
var binomial = Fn.new { |n, k| |
|||
if (n < 0 || k < 0) Fiber.abort("Arguments must be non-negative integers") |
|||
if (n < k) Fiber.abort("The second argument cannot be more than the first.") |
|||
if (n == k) return 1 |
|||
var prod = 1 |
|||
var i = n - k + 1 |
|||
while (i <= n) { |
|||
prod = prod * i |
|||
i = i + 1 |
|||
} |
|||
return prod / Int.factorial(k) |
|||
} |
|||
var limit = 14 |
|||
System.write("n/k |") |
|||
for (k in 0..limit) System.write(Fmt.d(5, k)) |
|||
System.print() |
|||
System.write("----+" + "-----" * (limit + 1)) |
|||
System.print() |
|||
for (n in 0..limit) { |
|||
System.write("%(Fmt.d(3, n)) |") |
|||
for (k in 0..n) System.write(Fmt.d(5, binomial.call(n, k))) |
|||
System.print() |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
n/k | 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|||
----+--------------------------------------------------------------------------- |
|||
0 | 1 |
|||
1 | 1 1 |
|||
2 | 1 2 1 |
|||
3 | 1 3 3 1 |
|||
4 | 1 4 6 4 1 |
|||
5 | 1 5 10 10 5 1 |
|||
6 | 1 6 15 20 15 6 1 |
|||
7 | 1 7 21 35 35 21 7 1 |
|||
8 | 1 8 28 56 70 56 28 8 1 |
|||
9 | 1 9 36 84 126 126 84 36 9 1 |
|||
10 | 1 10 45 120 210 252 210 120 45 10 1 |
|||
11 | 1 11 55 165 330 462 462 330 165 55 11 1 |
|||
12 | 1 12 66 220 495 792 924 792 495 220 66 12 1 |
|||
13 | 1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1 |
|||
14 | 1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1 |
|||
</pre> |
|||
=={{header|XPL0}}== |
=={{header|XPL0}}== |