天天看點

Trailing Loves (or L'oeufs?) CodeForces - 1114C

​​http://codeforces.com/problemset/problem/1114/C​​

将b素因子拆分 形如b=(a1^p1)*(a2^p2)*...*(ak^pk)

湊出一個尾0 就需要p1個a1 p2個a2...pk個ak 然後看n能提供多少 取最小即可

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=0x3f3f3f3f3f3f3f3f;

int main()
{
    ll n,b,i,lim,sum,val,tmp,ans;
    scanf("%lld%lld",&n,&b);
    ans=N;
    for(i=2;i*i<=b;i++){
        if(b%i==0){
            lim=0;
            while(b%i==0){
                b/=i;
                lim++;
            }
            sum=0,val=1,tmp=i;
            while(1){
                if(n/val<tmp) break;
                val*=tmp;
                sum+=n/val;
            }
            ans=min(ans,sum/lim);
        }
    }
    if(b!=1){
        sum=0,val=1,tmp=b;
        while(1){
            if(n/val<tmp) break;
            val*=tmp;
            sum+=n/val;
        }
        ans=min(ans,sum);
    }

    printf("%lld\n",ans);
    return 0;
}

//1000000000000000000 97      

繼續閱讀