质因数分解+阶乘质因数分解,取p质因数分解的指数和阶乘质因数分解指数比值的最小值即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
#define int long long int
const ll N=100000+10;
const int INF=(1LL<<63)-1;
int cal(ll x,ll n)
{
int ans=0;
while(n)
{
ans+=n/x;
n/=x;
}
return ans;
}
signed main()
{
ll n,p;
while(~scanf("%lld%lld",&n,&p))
{
int ans=INF;
for(int i=2;i*i<=p;i++)
{
int cnt=0;
if(p%i==0)
{
int sum=cal(i,n);
while(p%i==0)cnt++,p/=i;
ans=min(ans,sum/cnt);
}
}
if(p>1)
{
int sum=cal(p,n);
ans=min(ans,sum/1);
}
printf("%lld\n",ans);
}
return 0;
}