rt. 求助各位大佬.
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
using namespace std;
#define fore(i, u) for(reg int i=head[u]; i; i=e[i].nxt)
#define fora(i, a, b, c) for(reg LL i=a; i<=b; i+=c)
#define forb(i, a, b, c) for(reg int i=a; i>=b; i-=c)
#define uLL unsigned long long
#define INF 0x3f3f3f3f
#define LL long long
#define reg register
#define P 10000000
#define R read()
inline LL read(){
LL s=0, f=1; char c=getchar();
while(!isdigit(c)) { if(c=='-') f=-f; c=getchar(); }
while(isdigit(c)) s=(s<<3)+(s<<1)+(c^48), c=getchar();
return s*f;
}
LL n, b, p, ans, pri[P], c[P];
int main(){
n=R, b=R, ans=1e18*4*1LL;
for(reg LL i=2, k=0; i*i<=b; ++i, k=0){
if(b%i) continue;
while(!(b%i)) b/=i, ++k;
pri[++p]=i, c[p]=k;
}
if(b>1) pri[++p]=b, c[p]=1;
fora(i, 1, p, 1){
LL t=0;
for(reg LL j=pri[i]; j<=n; j*=pri[i])
t+=n/j;
ans=min(ans, t/c[i]);
}
return !printf("%lld", ans);
}