Pagini recente » Cod sursa (job #3164746) | Cod sursa (job #1208815) | Cod sursa (job #2619532) | Cod sursa (job #2758465) | Cod sursa (job #1917275)
#include<stdio.h>
//using namespace std;
#define INF 2000000000
int legendre(int n, int d){
int p, s;
p=d; s=0;
while(n/p>=1){
s=s+n/p;
p*=d;
}
return s;
}
int main(){
FILE*fin=fopen("gfact.in", "r");
FILE*fout=fopen("gfact.out", "w");
int n, p, q, st, dr, d, nr, min, exp, sol, cop;
fscanf(fin, "%d%d", &p, &q);
st=1; dr=INF;
sol=-INF;
while(st<=dr){
n=(st+dr)/2;
d=2;
min=INF;
cop=p;
while(d*d<=p){
exp=0;
while(p%d==0){
p/=d;
exp++;
}
if(exp>0){
nr=legendre(n, d);
if(nr/exp<min)
min=nr/exp;
}
d++;
}
if(p>1){
nr=legendre(n, p);
if(nr<min)
min=nr;
}
if((min/q)>=1){
dr=n-1;
sol=n;
}
else
st=n+1;
p=cop;
}
fprintf(fout, "%d", sol);
return 0;
}