tyvj4877 组合数
1.组合数
(zero.cpp/c/pas)
时间限制:1s
内存限制:256MB
【问题描述】
从m个不同元素中,任取n(n≤m)个元素并成一组,叫做从m个不同元素中取出n个元素的一个组合;从m个不同元素中取出n(n≤m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数,记作C(m,n)。
你的任务是:计算C(m,n)末尾有几个0。如C(10,1)=10,末位有一个0。
【输入】
输入文件名为zero.in。
第一行一个数T(<=1000),表示数据组数
对于每一组数据:输入两个数,m和n
【输出】
输出文件名为zero.out。
对于每组数据输出一行,包含一个数,表示C(m,n)末尾有几个0
智障题目,0的个数就是2和5中较小者的个数
#include<stdio.h> #include<algorithm> using namespace std; #define MAXN 1000000 int cnt5[MAXN+10],cnt2[MAXN+10]; void init(){ for(int i=1;i<=MAXN;i++){ int p=i; while(p%5==0)p/=5,cnt5[i]++; while(!(p&1))p>>=1,cnt2[i]++; cnt5[i]+=cnt5[i-1]; cnt2[i]+=cnt2[i-1]; } } int main(){ init(); int T; scanf("%d",&T); while(T--){ int m,n; scanf("%d%d",&m,&n); int ans=min(cnt2[m]-cnt2[n]-cnt2[m-n],cnt5[m]-cnt5[n]-cnt5[m-n]); printf("%d\n",ans); } return 0; }
Hello World