传送门
首先这个题的意思是给你四个数字,让你找出这四个数字按照规则组合在一起得到的数字的后缀0的个数
前两个数字为组合数,后面两个为指数然后再相乘
我们的目的是得到后缀0的位数,而后缀0则取决于分解因子后5的个数和2的个数,所以我们只需要统计这两个数字的个数取最小即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long LL;
signed main() {
int t;
cin>>t;
for(int i=1; i<=t; i++) {
int n,r,p,q;
cin>>n>>r>>p>>q;
int two=0,five=0;
while(p%2==0) p/=2,two++;
while(p%5==0) five++, p/=5;
two*=q,five*=q;
int k=n;
while(k) k/=5, five+=k;
k=n;
while(k) k/=2,two+=k;
k=n-r;
while(k) k/=5, five-=k;
k=n-r;
while(k) k/=2, two-=k;
k=r;
while(k) k/=5, five-=k;
k=r;
while(k) k/=2, two-=k;
printf("Case %d: ",i);
cout<<min(two,five)<<'\n';
}
return 0;
}