Pagini recente » Cod sursa (job #840598) | Cod sursa (job #2908458) | Cod sursa (job #2935194) | Cod sursa (job #2078933) | Cod sursa (job #1988552)
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("zero2.in");
ofstream g("zero2.out");
int N,B,Bputere[10001],Numere[10001],nr;
bool u[10001];
void ciur(){
for(int i=2;i<=10000;++i)
if(!u[i]){
int j=1;
while(i*j<=10000)u[i*j]=1,++j;
}
}
void descompNum(int y[],int U,int &mAx){
int f=2,x=U;
while(f*f<=x){
if(!(U%f)){
mAx=max(mAx,f);
while(!(U%f))U/=f,++y[f];
}
if(f==2)++f;
else f+=2;
}
if(U>1)++y[U],mAx=U;
}
int main()
{
while(f>>N>>B){
if(B==10){
nr=0; int p=5;
while(N/p)nr+=(N/p),p*=p;
g<<nr<<"\n";
}else{
ciur();
bool q=1;
int MaxB=0,MaxN=0;
if(!u[B])++Bputere[B],MaxB=max(MaxB,B),q=0;
else descompNum(Bputere,B,MaxB);
for(int i=2;i<=N;++i)
for(int j=2;j<=i;++j)
if(!u[j])++Numere[j],MaxN=max(MaxN,j);
else descompNum(Numere,j,MaxN);
nr=999999999;
if(!q)nr=min(nr,Numere[B]/Bputere[B]);
else{
for(int i=2;i<=MaxB;++i)
if(Bputere[i])nr=min(nr,Numere[i]/Bputere[i]),Bputere[i]=0;
}
memset(Numere,0,sizeof(Numere));
g<<nr<<"\n";
}
}
return 0;
}