您的位置:首页 > 其它

XDU1019 阶乘因子的个数

2016-02-24 22:53 246 查看
  题意是让你求一个最小的N, 使得N!有M个0,N的阶乘中2的因子是远多于5的因子的个数, 因此我们统计出5的个数就知道其后面有几个0,对于一个数mid, mid!中5的因子的个数为mid/5 + mid/25 + mid/5^3 + ... 可以发现mid越大mid!中的5的个数越多, 因此我们可以二分答案, 代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>

using namespace std;
typedef long long LL;
int M;

int check(LL mid)   //mid 的阶乘中5的个数
{
LL a = 5;
int res = 0;
while(a <= mid)
{
res += mid/a;
a *= 5;
}
return res;
}

int main()
{
int T;
cin>>T;
while(T--)
{
cin>>M;
LL l=1, r=1000000000;
LL res = -1;
while(l <= r)
{
LL mid = (l+r)/2;
int tp = check(mid);
if(tp == M)
{
res = mid;
r = mid-1;
}
else if(tp > M) r = mid - 1;
else l = mid + 1;
}
if(res == -1)
cout<<"No solution\n";
else
cout<<res<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: