题目链接:
思路:
可以转换成n!%(b^x)==0,求x的最大值。
先将b转换成素因子幂相乘的形式。
然后求n!各个对应的素因子除以b中素因子的最小值。
这里用到了求n!中素因子个数的方法:
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,b;
const int maxn=1e6+5;
ll a[maxn];
ll num1[maxn];
int cnt1=0;
void Calb (ll x)
{
ll t=x;
ll sq=sqrt(t);
for (ll i=2;i<=sq;i++)
{
if(t%i==0)
{
a[++cnt1]=i;
while (t%i==0)
{
t/=i;
num1[cnt1]++;
}
}
}
if(t>1)
{
a[++cnt1]=t;
num1[cnt1]=1;
}
}
ll Caln (ll x,ll y)
{
ll t=x,ans=0;
while (t>=y)
{
ans+=t/y;
t/=y;
}
return ans;
}
int main()
{
memset (num1,0,sizeof(num1));
scanf("%lld%lld",&n,&b);
if(n==1)
{
printf("0\n");
return 0;
}
Calb(b);
ll ans=1e18+5;
for (int i=1;i<=cnt1;i++)
{
ll cal=Caln(n,a[i]);
ans=min(ans,cal/num1[i]);
}
printf("%lld\n",ans);
return 0;
}