n!在m进制下的后导零个数
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int t,n,p;
vector<int>prime;
int vis[1000005],cnt[1000005];
bool check(int a) {
if(a==1) return 0;
if(a==2||a==3) return 1;
if(a%6!=1&&a%6!=5) return 0;
int tmp=sqrt(a);
for(int i=5; i<=tmp; i+=6) {
if(a%i==0||a%(i+2)==0) return 0;
}
return 1;
}
int main() {
for(int i=1; i<=1000000; i++) {
if(check(i)) prime.push_back(i);
}
scanf("%d",&t);
while(t--) {
memset(vis,0,sizeof(vis));
memset(cnt,0,sizeof(cnt));
scanf("%d%d",&n,&p);
int tmp=p;
for(int i=0; i<prime.size(); i++) {
if(prime[i]>tmp) break;
while(tmp%prime[i]==0) {
vis[prime[i]]++;
tmp/=prime[i];
}
}
for(int i=0; i<prime.size(); i++) {
if(prime[i]>p) break;
if(vis[prime[i]]) {
int res=0,tmp=n,x=prime[i];
while(tmp) {
res+=tmp/x;
tmp/=x;
}
cnt[prime[i]]=res;
}
}
int ans=INF;
for(int i=0; i<prime.size(); i++) {
if(prime[i]>p) break;
if(vis[prime[i]]) {
ans=min(ans,cnt[prime[i]]/vis[prime[i]]);
}
}
printf("%d\n",ans);
}
return 0;
}