#P1306. Combinations

Combinations

题目描述

NN和(或)MM变得非常大时,精确计算从NN个事物中每次取出MM个事物的方法的确切数量可能是一个巨大的挑战。而挑战正是竞赛的关键所在。因此,给定以下条件,你需要进行这样的计算:

给定条件5N1005 \leq N \leq 1005M1005 \leq M \leq 100MNM \leq N

计算以下表达式的确切值:C=N!/(NM)!M!C = N! / (N - M)!M!

你可以假设CC的最终值将适合存储在32位的Pascal语言的LongInt类型或C语言的long类型中。郑重说明一下,100!100!的确切值是:

$93,326,215,443,944,152,681,699,238,856,266,700,490,715,968,264,381,621, 468,592,963,895,217,599,993,229,915,608,941,463,976,156,518,286,253, 697,920,827,223,758,251,185,210,916,864,000,000,000,000,000,000,000,000$

输入

该程序的输入将是一行或多行,每行包含零个或多个前导空格、一个NN的值、一个或多个空格以及一个MM的值。输入文件的最后一行将包含一对虚拟的NNMM值,且这两个值都等于零。当读取到这一行时,你的程序应该终止。

输出

该程序的输出应该采用以下形式:

NN个事物每次取出MM个时恰好有CC种方法。

输入示例

100  6
20  5
18  6
0  0

输出示例

100 things taken 6 at a time is 1192052400 exactly.
20 things taken 5 at a time is 15504 exactly.
18 things taken 6 at a time is 18564 exactly.

来源

UVA 第三卷 369题