#include<stdio.h>
#include<string.h>
bool mark[1010];
int prime[1010];
int primesize;
void init(){
primesize=0;
for(int i=2;i<=1000;i++){
if(mark[i]==true) continue;
prime[primesize++]=i;
for(int j=i*i;j<=1000;j+=i) mark[j]=true;
}
}
int cnt[1010]; // 保存n!中因子的幂指数
int cnt2[1010]; // 保存a中因子的幂指数
int main()
{
int a,n;
init();
while(scanf("%d%d",&n,&a)!=EOF){
for(int i=0;i<primesize;i++) cnt[i]=cnt2[i]=0; // 将两个计数器清零
for(int i=0;i<primesize;i++){
int t=n;
while(t){ // 确定素数prime[i]在n中的因子数
cnt[i]+=t/prime[i];
t=t/prime[i];
}// 依次计算t/prime[i]^k,累加其值,直到t/prime[i]^k变为0
}
int ans=123123123; // 答案初始值为一个大整数,为取最小值做准备
for(int i=0;i<primesize;i++){ // 对素因数a分解
while(a%prime[i]==0){
cnt2[i]++;
a/=prime[i];
} // 计算a中素因数prime[i]对应的幂指数
if(cnt2[i]==0) continue;
if(cnt[i]/cnt2[i]<ans) ans=cnt[i]/cnt2[i];
}
printf("%d\n",ans);
}
return 0;
}
#include<string.h>
bool mark[1010];
int prime[1010];
int primesize;
void init(){
primesize=0;
for(int i=2;i<=1000;i++){
if(mark[i]==true) continue;
prime[primesize++]=i;
for(int j=i*i;j<=1000;j+=i) mark[j]=true;
}
}
int cnt[1010]; // 保存n!中因子的幂指数
int cnt2[1010]; // 保存a中因子的幂指数
int main()
{
int a,n;
init();
while(scanf("%d%d",&n,&a)!=EOF){
for(int i=0;i<primesize;i++) cnt[i]=cnt2[i]=0; // 将两个计数器清零
for(int i=0;i<primesize;i++){
int t=n;
while(t){ // 确定素数prime[i]在n中的因子数
cnt[i]+=t/prime[i];
t=t/prime[i];
}// 依次计算t/prime[i]^k,累加其值,直到t/prime[i]^k变为0
}
int ans=123123123; // 答案初始值为一个大整数,为取最小值做准备
for(int i=0;i<primesize;i++){ // 对素因数a分解
while(a%prime[i]==0){
cnt2[i]++;
a/=prime[i];
} // 计算a中素因数prime[i]对应的幂指数
if(cnt2[i]==0) continue;
if(cnt[i]/cnt2[i]<ans) ans=cnt[i]/cnt2[i];
}
printf("%d\n",ans);
}
return 0;
}