组合数末尾的零

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

Hint


#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int work(int m,int n)  
{  
    int sum1=0,sum2=0;  
    for(int i=m,j=n;j>0;i--,j--)  
    {  
        int a=i;  
        int b=j;  
        while(a%2==0)  
        {  
            sum1++;  
            a/=2;  
        }  
        while(b%2==0)  
        {  
            sum2++;  
            b/=2;  
        }  
    }     
        return sum1-sum2;  
      
}  
          
int main()  
{  
    int T,m,n;  
    cin>>T;  
    while(T--)  
    {  
        cin>>m>>n;  
        cout<<work(m,n)<<endl;  
    }  
    return 0;  
}  
/**********************************************************************
	Problem: 1021
	User: song_hai_lei
	Language: C++
	Result: AC
	Time:0 ms
	Memory:2024 kb
**********************************************************************/


原文地址:https://www.cnblogs.com/csushl/p/9386556.html