SGU154 Factorial 【二分答案】【n!素因子分解】

来源:互联网 发布:淘宝店铺装修免费软件 编辑:程序博客网 时间:2024/06/05 05:55
【题目大意】
给定一个Q,让你输出最小的n,使得n!末位的0的个数=Q。
n>=1。
如果没有,那么输出无解。
【算法分析】
显然末位0的个数随关于n单调递增,那么二分答案,并分解n!,看里面有多少个·素因子5就等于知道末位有多少个0了。
首先n!里,2肯定比5要多。而只有2*5=10。所以看5有多少个就可以了。
然后对于这个求法,你可以先把n化为5进制数,然后一位一位截过去,很容易理解这个做法。
【CODE】
Code sgu154:
1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233
#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>using namespace std;typedef long long lld;lld Q;lld Get(lld x){    lld res=0;    while (x){          res+=x/5;          x/=5;    }    return res;}int main(){    cin >> Q;    if (Q==0){      printf("1\n");      return 0;    }    lld l=1,r=(lld)(1000000)*1000000,mid;    while (l<r){          mid=(l+r)/2;          if (Get(mid)<Q) l=mid+1;                     else r=mid;    }    if (Get(l)==Q) cout << l << endl;              else cout << "No solution" << endl;    return 0;}
原创粉丝点击