• 组合数末尾的零


    1021: 组合数末尾的零

    Time Limit: 1 Sec  Memory Limit: 128 MB

    Description

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

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

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

    Input

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

    Output

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

    Sample Input

    2
    4 2
    1000 500
    

    Sample Output

    1
    6


    思路:
    解这道题的方法是分别求m,n,m-n的2因子的个数,设这个个数分别为x,y,z那么这个组合数末尾零的数量是(2^x-1)-(2^y-1)-(2^z-1)

    代码:
    #include"iostream"
    #include"cmath"
    using namespace std;
    int main()
    {
    int a[]={0,1,3,7,15,31,63,127,255,511};
    int T;
    cin>>T;
    while(T--)
    {
    
    int ans;
    int m,n;
    cin>>m>>n;
    
    ans=0;
    
    for(int i=0;i<15;i++)
    {
    if((m>>i)&1) ans+=a[i];
    if((n>>i)&1) ans-=a[i];
    if(((m-n)>>i)&1) ans-=a[i];
    }
    
    cout<<ans<<endl;
    
    }
    
    return 0;
    
    }
  • 相关阅读:
    Python 不同数据类型比较
    计算机外语收集
    d3.js学习-联系力学图
    d3.js学习11
    d3.js学习10
    d3.js学习9
    d3.js学习8
    [springboot jpa] [bug] Could not open JPA EntityManager for transaction
    [spring cloud feign] [bug] 使用对象传输get请求参数
    [ethereum源码分析](5) 创建新账号
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/4653915.html
Copyright © 2020-2023  润新知