530. Биномиальный коэффициент
Сколькими способами можно
выбрать k элементов из n, если не принимать во внимание их
порядок?
Вход. Каждая строка содержит два числа n (n ³ 1) и k (0 £ k £ n). Последняя
строка содержит два ноля и не обрабатывается.
Выход. Для
каждой пары чисел n и k вывести число способов, которыми можно выбрать k элементов из n. Известно, что выводимое
значение всегда меньше 231.
4 2
10 5
49 6
0 0
6
252
13983816
комбинаторика
Значение биномиального
коэффициента вычислим по формуле:
= =
По условию задачи значение не больше 231 – 1, но в процессе вычислений значения текущих переменных
могут выходить за границы типа int. Поэтому для временных переменных будем
использовать 64-битовый тип long long. Если значение m близко к n, следует
воспользоваться свойством = , чтобы не получить Time Limit.
Функция Cnk(k, n)вычисляет
значение биномиального коэффициента .
int Cnk(int
k, int n)
{
long long res = 1;
if (k > n - k) k = n - k;
for(int i = 1; i
<= k; i++)
res = res * (n - i
+ 1) / i;
return (int)res;
}
Основной цикл программы.
Читаем значения n и k и выводим Cnk(k, n).
while(scanf("%d
%d",&n,&k),n + k)
printf("%d\n",Cnk(k,n));