Pagini recente » Cod sursa (job #2142898) | Cod sursa (job #680517) | Cod sursa (job #2728836) | Cod sursa (job #1858135) | Cod sursa (job #1920142)
#include<stdio.h>
//using namespace std;
#define INF 20000000000000000
long long legendre(long long n, long long d){
long long 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");
long long n, p, q, st, dr, d, nr, min, exp, sol, cop;
fscanf(fin, "%lld%lld", &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, "%lld", sol);
return 0;
}