问题等价于n(n-1)*……(n-m+1)上述乘积里面能分解出几个2。
乘积能分解出的2的数量=每个乘数分别判其断能分解出的2的数量之和
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 10000;
int main(){
int n, m, cnt, sum;
while(~scanf("%d %d", &n, &m) && n && m){
sum = 0;
for(int i = n - m + 1; i <= n; i++){
cnt = 0;
int t = i;
while((t & 1) == 0){
t >>= 1;
cnt++;
}
sum += cnt;
}
printf("%d\n", sum);
}
return 0;
}
京公网安备 11010502036488号