Binomial Showdown
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
In how many ways can you choose
k elements out of
n elements, not taking order into account?
Write a program to compute this number.
Write a program to compute this number.
输入
The input file will contain one or more test cases.
Each test case consists of one line containing two integers n ( n>=1) and k (0<= k<= n).
Input is terminated by two zeroes for n and k.
Each test case consists of one line containing two integers n ( n>=1) and k (0<= k<= n).
Input is terminated by two zeroes for n and k.
输出
For each test case, print one line containing the required number. This number will always fit into an integer, i.e. it will be less than 2
31.
Warning: Don't underestimate the problem. The result will fit into an integer - but if all intermediate results arising during the computation will also fit into an integer depends on your algorithm. The test cases will go to the limit.
示例输入
4 2 10 5 49 6 0 0
示例输出
6 252 13983816
提示
来源
示例程序
#include <stdio.h>
long gcd( long a, long b )
{
return !b?a:gcd( b, a%b );
}
long c( long n, long k )
{
long A = 1L,C;
for ( long i = 1L ; i <= k ; ++ i, -- n )
{
C = gcd( i, n );
A *= n/C;
A /= i/C;
}
return A;
}
int main()
{
long n,k;
while ( scanf("%ld%ld",&n,&k) && n )
{
if ( 2L*k > n ) k = n-k;
printf("%ld\n",c( n, k ));
}
return 0;
}