ACM求C(m, n) = m!/((m - n)!n!) 的二进制数的末尾零的数量

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\n",r-v);
      }
 
      return 0;
}
时间: 2024-10-10 15:18:36

ACM求C(m, n) = m!/((m - n)!n!) 的二进制数的末尾零的数量的相关文章

ACM求路灯照射的最小半径问题

---恢复内容开始--- Description Vanya walks late at night along a straight street of length l, lit by n lanterns. Consider the coordinate system with the beginning of the street corresponding to the point 0, and its end corresponding to the point l. Then th

ACM求经过k次移动后所得的逆序数

Description bobo has a sequence a 1,a 2,…,a n. He is allowed to swap two adjacent numbers for no more than k times. Find the minimum number of inversions after his swaps. Note: The number of inversions is the number of pair (i,j) where 1≤i<j≤n and a 

ACM求矩形的数目

Description 给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形,下图为高为2,宽为4的网格.  Input 第一行输入一个t, 表示有t组数据,然后每行输入n,m,分别表示网格的高和宽 ( n < 100 , m < 100). Output 每行输出网格中有多少个矩形. Sample Input 2 1 2 2 4 Sample Output 3 30 解题思路:这个题目就是一个找规律的问题,找到规律就很简单了. 程序代码: #include<iostream&

[LeetCode] Factorial Trailing Zeroes 求阶乘末尾零的个数

Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in logarithmic time complexity. Credits:Special thanks to @ts for adding this problem and creating all test cases. 这道题并没有什么难度,是让求一个数的阶乘末尾0的个数,也就是要找乘数中10的个数,

2016/6/1 第九届ACM大赛前夕模板总结

 一.最小生成树...............................................................................................................2 1.最小生成树:v + v + value布线问题.................................................................2 3.prim算法之矩阵类型......................

偶数分割求平均值

////////////有一个长度为n(n<=100)的数列,该数列定义为//从2开始的递增有序偶数,现在要求你按照顺序每m个//数求出一个平均值,如果最后不足m个,//则以实际数量求平均值.编程输出该平均值序列. #include<stdio.h> int a[101]; void main() { int n,m; int i,sum; for(i=1;i<=100;i++) a[i]=2*i; while(scanf("%d%d",&n,&

ACM/ICPC 之 DFS求解欧拉回路+打表(POJ1392)

本题可以通过全部n位二进制数作点,而后可按照某点A的末位数与某点B的首位数相等来建立A->B有向边,以此构图,改有向图则是一个有向欧拉回路,以下我利用DFS暴力求解该欧拉回路得到的字典序最小的路径. //求咬尾数,一个2^n位环形二进制数,该二进制的每n位连续二进制数都不同 //DFS求解欧拉回路 //Time:32ms Memory:1668K #include<iostream> #include<cstring> #include<cstdio> using

NYOJ 954 求N!二进制末尾几个0

NYOJ 954 求N!二进制末尾几个0 题目地址: NYOJ 954 题意: 中文题不解释. 分析: 即是求N!二进制末尾几个0,换句话就是求N!的因子有几个2. 具体做法跟POJ 1401一样,题解见:POJ 1401 && ZOJ 2202 Factorial 阶乘N!的末尾零的个数 代码: /* * Author: illuz <iilluzen[at]gmail.com> * File: 954.cpp * Create Date: 2014-05-26 20:31:

ACM HDU 2015

偶数求和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 91317    Accepted Submission(s): 38494 Problem Description 有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值.编程输出