zoukankan      html  css  js  c++  java
  • 求一个数的阶乘在 m 进制下末尾 0 的个数

    题意 :

      求一个数 n 的阶层在 m 进制下末尾 0 的个数

    思路分析 :

      如果是 10 进制地话我们是很容易知道怎么做的,数一下其对 5 约数地个数即可,但是换成 m 进制的话就需要先将 m 分解质因数,然后然后看 n! 下因数个数最少的是几个,即是最终答案。

    代码示例 :

    #define ll long long
    const ll maxn = 1e6+5;
    const ll mod = 1e9+7;
    const double eps = 1e-9;
    const double pi = acos(-1.0);
    const ll inf = 0x3f3f3f3f;
    
    ll n, b;
    ll prime[maxn];
    vector<ll>ve;
    
    void init(){
        for(ll i = 2; i <= 1000000; i++){
            if (!prime[i]){
                ve.push_back(i);
                for(ll j = 2*i; j <= 1000000; j += i){
                    prime[j] = 1;
                }
            }
        }
    }
    ll get(ll pp, ll x){
        ll res = 0;
        
        while(x){
            res += x/pp;
            x /= pp;
        }
        return res;
    }
    
    ll cnt[maxn], num[maxn];
    void solve(){
        ll f = b;
        for(ll i = 0; i < ve.size(); i++){
            if (f == 1) break;
            while(f%ve[i] == 0){
                cnt[ve[i]]++;
                f /= ve[i];
            }        
        }
        for(ll i = 0; i < ve.size(); i++){
            if (cnt[ve[i]]){
                num[ve[i]] = get(ve[i], n);
            }
        }
        ll ans = 1e18+10;
        if (f != 1) ans = min(ans, get(f, n));
        for(ll i = 0; i < ve.size(); i++){
            if (cnt[ve[i]]){
                ans = min(ans, num[ve[i]]/cnt[ve[i]]);
            }
        }
        cout << ans << endl;
    }
    
    int main() {
        //freopen("in.txt", "r", stdin);
        //freopen("out.txt", "w", stdout);
        
        cin >> n >> b;
        init();
        solve();
        return 0;
    }
    
  • 相关阅读:
    拓扑排序
    最短路径(Dijkstra,SPFA,Floyd)
    最小生成树(Prim)
    最长公共子序列(DP)(二种数组实现+扩展)
    HDU3068(最长回文串)
    python pip 阿里云内网安装地址
    python matplotlib画图改为可写中文
    win10 安装 basemap
    Liunx 安装basemap
    Docker 命令大全
  • 原文地址:https://www.cnblogs.com/ccut-ry/p/10363066.html
Copyright © 2011-2022 走看看