zoukankan      html  css  js  c++  java
  • XDU1019 阶乘因子的个数

      题意是让你求一个最小的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
    ";
            else
                cout<<res<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Codeforces Round #439 (Div. 2)
    Money Systems
    Stamps
    inflate
    多重背包问题
    AIM Tech Round 4 (Div. 2)
    September Challenge 2017
    树的重心
    百度之星2017初赛A
    树上的最大独立集
  • 原文地址:https://www.cnblogs.com/xingxing1024/p/5215430.html
Copyright © 2011-2022 走看看