组合数末尾的零

转载 2018年04月15日 21:23:42

组合数末尾的零

Description

m个不同元素中取出(≤ m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。组合数的计算公式如下:

C(mn) = m!/((n)!n!) 

现在请问,如果将组合数C(mn)写成二进制数,请问转这个二进制数末尾有多少个零。

Input

第一行是测试样例的个数T,接下来是T个测试样例,每个测试样例占一行,有两个数,依次是mn,其中≤ ≤ 1000。

Output

分别输出每一个组合数转换成二进制数后末尾零的数量。

Sample Input

24 21000 500

Sample Output

16
数很大不能计算出m的组合数,将组合数的分子分母中所有2的因子分离出来,那么相除的结果中剩余的2的因子,也就是组合数2的因子,即末尾0的个数(二进制数末尾添加一个零就等于对该数乘二)
  1. #include <iostream>   
  2. using namespace std;  
  3. int solve(int n)  
  4. {  
  5.     int sum=0;  
  6.     for(int i=1;i<=n;i++)  
  7.     {  
  8.         int x=i;  
  9.         while(x)  
  10.         {  
  11.             if(x&1) break;  
  12.             sum++;  
  13.             x/=2;  
  14.         }  
  15.     }  
  16.     return sum;  
  17. }  
  18. int main()  
  19. {  
  20.     int T,n,m;  
  21.     scanf("%d",&T);  
  22.     while(T--)  
  23.     {  
  24.         scanf("%d %d",&n,&m);  
  25.         printf("%d\n",solve(n)-solve(n-m)-solve(m));  
  26.     }  
  27.     return 0;  
  28. }  
  1. #include<iostream>  
  2. using namespace std;  
  3. int C(int m,int n)  
  4. {  
  5.     int i,sum1=0,sum2=0,j;  
  6.     for(i=m,j=n;j>0;i--,j--)  
  7.     {  
  8.         int a=i;  
  9.         int b=j;  
  10.         while(a%2==0)  
  11.         {  
  12.             sum1++;  
  13.             a/=2;  
  14.         }  
  15.         while(b%2==0)  
  16.         {  
  17.             sum2++;  
  18.             b/=2;  
  19.         }  
  20.     }     
  21.         return sum1-sum2;  
  22.       
  23. }  
  24.           
  25.   
  26. int main()  
  27. {  
  28.     int T,m,n;  
  29.     cin>>T;  
  30.     while(T--)  
  31.     {  
  32.         cin>>m>>n;  
  33.         cout<<C(m,n)<<endl;  
  34.     }  
  35.     return 0;  
  36. }  


一步步Nokia Series60开发入门教程2.0

来自www.Move2008.com请下载PDF文档:http://www.move2008.com/down/download/Series60_Dev_Start2.0.zip...
  • bedlang
  • bedlang
  • 2002-11-14 09:18:00
  • 1158

csu 1021 组合数末尾的零(思路)

组合数末尾的零 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 417  Solved: 284 [Submit][Status][Web B...
  • acm_cxq
  • acm_cxq
  • 2016-08-19 09:58:36
  • 469

哈理工OJ 1037组合数末尾的零(思维)

组合数末尾的零 Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 250(168 u...
  • mengxiang000000
  • mengxiang000000
  • 2016-01-14 17:22:29
  • 713

Hust oj 1037 组合数末尾的零(组合数)

组合数末尾的零 Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 378(179 u...
  • Sara_YF
  • Sara_YF
  • 2016-05-13 11:15:00
  • 554

CSU 1021 组合数末尾的零

题目:Description从m个不同元素中取出n (n ≤ m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。组合数的计算公式如下:C(m, n) = m!/((m - n)!n...
  • nameofcsdn
  • nameofcsdn
  • 2016-08-23 23:48:29
  • 1338

CSU1021: 组合数末尾的零

题目链接:点击打开链接 题中所求是C(m, n)转换为二进制数后,其末尾有多少个0,我们可以利用公式C(m, n) = m!/((m - n)!n!) 将C(m, n) 直接求出来,然后将其对...
  • rivenyzp
  • rivenyzp
  • 2016-09-11 11:50:33
  • 79

ACM:组合数末尾的零

ACM:组合数末尾的零Description从m个不同元素中取出n (n ≤ m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。组合数的计算公式如下:C(m, n) = m!/((...
  • niu15273122295
  • niu15273122295
  • 2017-05-09 15:15:19
  • 128

CSU1021组合数末尾的零

1021: 组合数末尾的零Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 710...
  • Hpuer_Random
  • Hpuer_Random
  • 2018-04-14 23:23:51
  • 14

POJ NOI MATH-7657 连乘积末尾0的个数

问题链接:POJ NOI MATH-7657 连乘积末尾0的个数。 总时间限制: 1000ms内存限制: 65536kB 描述 给定两个正整数a,b(a a×(a+1)×(a+2)×....
  • tigerisland45
  • tigerisland45
  • 2017-04-04 22:52:00
  • 527

末尾零的个数(数论)

末尾零的个数N! 末尾有多少个 000 呢?N!=1×2×⋯×NN! = 1 \times 2 \times \cdots \times NN!=1×2×⋯×N。里面讲到只有2和5遇到才会产生0(或者...
  • codeswarrior
  • codeswarrior
  • 2018-03-28 18:09:38
  • 50
收藏助手
不良信息举报
您举报文章:组合数末尾的零
举报原因:
原因补充:

(最多只允许输入30个字)