zoukankan      html  css  js  c++  java
  • ACM求C(m, n) = m!/((m

    Description

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

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

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

    Input

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

    Output

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

    Sample Input

    2

    4 2

    1000 500

    Sample Output

    1

    6

       解题思路:这个题目就是求因子的个数, m!/((m-n)!*n!)等于从n+1一直乘到m的乘积除以m-n的阶乘,即求n+1到m中因子的个数减去1到m-n的因子的个数即可。

      程序代码:

    #include <iostream>
    using namespace std;
    int main()
    {
          int T;
          cin>>T;
          while(T--)
          {
                int m,n;
                cin>>m>>n;
                int r=0,v=0;
                for(int i=n+1;i<=m;i++)
                {
                      int s=i;
                      while(s%2==0)
                      {
                            s=s/2;
                            r++;
                            
                      }
                }
                for(int j=1;j<=m-n;j++)
                {
                      int b=j;
                      while(b%2==0)
                      {
                            b=b/2;
                            v++;
                            
                      }
                }
                printf("%d
    ",r-v);
          }
     
          return 0;
    }
  • 相关阅读:
    skywalking源码改造
    skywalking包覆盖
    skywalking-拦截器实现(2)
    skywalking-拦截器实现(1)
    skywalking-过滤某些不需要被监控的接口
    扩展Spring-data-jpa导致注解@NamedEntityGraphs失效
    Skywalking日志收集功能使用:
    LRU缓存机制(基于LinkedHashMap)
    2020年总结
    Hbase简介
  • 原文地址:https://www.cnblogs.com/xinxiangqing/p/4655410.html
Copyright © 2011-2022 走看看