http://codeforces.com/contest/1114/problem/C
题意就是给你
n and b (1≤n≤1e18,2≤b≤1e12).问你把n!转化成b进制,有多少个0
就相当于 求 n! % (b^k) == 0 的最大 k。
首先,想要知道变成b进制有多少个0,就要处理出b的质因数,然后
记录每个素数含多少次方 b = p1^y1·p2^y2·...·pm^ym.
然后求n!种每个素数含多少次方n ! = p1^x1·p2^x2·...·pm^xm·
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll res=1e18;
ll n,m;
void solve(ll x,ll num)
{
ll ans=0,rp=1;
while(rp<=n/x)
{
rp*=x;
ans+=n/rp;
}
res=min(res,ans/num);
}
int main()
{
cin>>n>>m;
for(ll i=2;i*i<=m;i++)
{
if(m%i==0)
{
ll ans=0;
while(m%i==0)
{
m/=i;
ans++;
}
solve(i,ans);
}
}
if(m>1) solve(m,1);
cout<<res<<endl;
}