问题等价于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; }