zoukankan      html  css  js  c++  java
  • 组合数末尾的零

    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;
    
    }
  • 相关阅读:
    虚拟机网络不通
    设计师升职加薪必须知道的10个设计网站
    Centos设置防火墙与开放访问端口
    设置Jexus开机启动
    .Net 操作Excel表格
    Core 2.0使用Nlog记录日志+Mysql
    C# 操作docx文档
    JS截取页面,并保存到本地
    XmlReader 使用
    requireJS简单应用
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/4653915.html
Copyright © 2011-2022 走看看