Evaluate binomial coefficients: Difference between revisions

Content added Content deleted
(Updated D entry)
Line 325: Line 325:
=={{header|D}}==
=={{header|D}}==
<lang d>import std.stdio, std.bigint;
<lang d>import std.stdio, std.bigint;

T binomial(T)(/*in*/ T n, T k) /*pure nothrow*/ {
T binomial(T)(/*in*/ T n, T k) /*pure nothrow*/ {
if (k > n/2)
if (k > (n / 2))
k = n - k;
k = n - k;
T bc = 1;
T bc = 1;
//foreach (i; 1 .. k+1)
foreach (T i; cast(T)2 .. k + 1)
for (T i = 2; i <= k; i++)
bc = (bc * (n - k + i)) / i;
bc = (bc * (n - k + i)) / i;
return bc;
return bc;
}
}

void main() {
void main() {
foreach (d; [[5,3], [100,2], [100,98]])
foreach (d; [[5, 3], [100, 2], [100, 98]])
writefln("(%3d %3d) = %s", d[0], d[1], binomial(d[0], d[1]));
writefln("(%3d %3d) = %s", d[0], d[1], binomial(d[0], d[1]));
writeln("(100 50) = ", binomial(BigInt(100), BigInt(50)));
writeln("(100 50) = ", binomial(BigInt(100), BigInt(50)));
}</lang>
}</lang>
{{out}}
Output:
<pre>( 5 3) = 10
<pre>( 5 3) = 2
(100 2) = 4950
(100 2) = 50
(100 98) = 4950
(100 98) = 50
(100 50) = 100891344545564193334812497256</pre>
(100 50) = 1976664223067613962806675336</pre>


=={{header|Delphi}}==
=={{header|Delphi}}==