Pagini recente » Cod sursa (job #585298) | Cod sursa (job #3221422) | Cod sursa (job #3233322) | Borderou de evaluare (job #1683791) | Cod sursa (job #1988555)
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("zero2.in");
ofstream g("zero2.out");
int N,B,Bputere[1001],Numere[1001],nr;
bool u[1001];
void ciur(){
for(int i=2;i<=1000;++i)
if(!u[i]){
int j=1;
while(i*j<=1000)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=99999;
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;
}