//p(n, m)=n(n-1)(n-2)……(n-m+1)= n!/(n-m)! (规定0!=1). //归根结底就是在问n*(n-1)*……*(n-m+1)能整除几次2。 //也就是上述乘积里面能分解出几个2。 //那么,可以把每个乘数分别判其断能分解出的2的数量,然后加在一起就是乘积能分解出的2的数量。 #include<stdio.h> #define maxsize 1000 int main() { int n, m, temp; while (scanf("%d%d", &n, &m) != EOF) { if (n == 0) return 0; int count = 0; for (int i = n; i >= n - m + 1; i--) { temp = i; while (temp % 2 == 0) { //每个乘数:判其断能分解出的2的数量 16分解出4个2 count++; temp = temp / 2; } } printf("%d\n", count); } return 0; }