P3927
我全WA,然而把第一个点下下来
10 10
我的输出是2,和数据一模一样
然而却没过这个点
想问一问why
#include<bits/stdc++.h>
#define int long long
#define N 1000009
using namespace std;
int n,k,st[N],primes[N],cnt,idx,ans=1e13,nn;
struct Divisor{
int num,sum;
}d[N];
void init(int n){
for(int i=2;i<=n;i++){
if(!st[i]){
primes[++cnt]=i;
}
for(int j=1;j<=cnt&&primes[j]*i<=n;j++){
st[primes[j]*i]=1;
if(i%primes[j]==0){
break;
}
}
}
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>k;
init(N);
for(int i=1;i<=cnt&&primes[i]*primes[i]<=k;i++){
int x=primes[i];
if(k%x==0){
d[++idx].num=x;
while(k%x==0){
d[idx].sum++;
k/=x;
}
}
}
if(k>1){
d[++idx].num=k,d[idx].sum=1;
}
nn=n;
for(int i=1;i<=idx;i++){
int x=d[i].num,have=0;
n=nn;
while(n){
have+=n/x;
n/=x;
}
ans=min(ans,have/d[i].sum);
}
cout<<ans;
return 0;
}