组合数末尾的零
|
||||||
Description | ||||||
从m个不同元素中取出n (n ≤ m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。组合数的计算公式如下: C(m, n) = m!/((m - n)!n!)
现在请问,如果将组合数C(m, n)写成二进制数,请问转这个二进制数末尾有多少个零。 |
||||||
Input | ||||||
第一行是测试样例的个数T,接下来是T个测试样例,每个测试样例占一行,有两个数,依次是m和n,其中m ≤ n ≤ 1000。 |
||||||
Output | ||||||
分别输出每一个组合数转换成二进制数后末尾零的数量。 |
||||||
Sample Input | ||||||
2 4 2 1000 500 |
||||||
Sample Output | ||||||
1 6 ![]() #include <stdio.h> int f[] = {0,1,3,7,15,31,63,127,255,511}; int main() { int T, m, n, i, ans; scanf("%d", &T); while (T-- > 0) { ans = 0; scanf("%d%d", &m, &n); for(i=0; i<10; ++i) { if (m>>i & 0x1)ans += f[i]; if (n>>i & 0x1)ans -= f[i]; if ((m-n)>>i & 0x1)ans -= f[i]; } printf("%d\n", ans); } return 0; } 题意很明确 |