Pagini recente » Cod sursa (job #2666531) | Cod sursa (job #2937872) | Cod sursa (job #1354060) | Cod sursa (job #1033807) | Cod sursa (job #157808)
Cod sursa(job #157808)
#include <stdio.h>
long long unsigned caut(long long unsigned c,long long unsigned d){
long long unsigned st,dr,m,cd,nr;
st=1;
dr=c*d*2;
while(st<=dr){
cd=d;
m=(st+dr)/2;
nr=0;
while(m/cd){
nr+=m/cd;
cd*=d;
}
if(nr==c) { while(m%d) m--; return m; }
else if(nr>c) dr=m-1;
else st=m+1;
}
while(st%d) st--;
return st;
}
int main(){
long long unsigned p,q,d,c,var,max=0;
FILE*f=fopen("gfact.in","r");
FILE*g=fopen("gfact.out","w");
fscanf(f,"%llu%llu",&p,&q);
for(d=2;d*d<=p;d++){
for(c=0;p%d==0;c++,p/=d);
if(c) { var=caut(c*q,d); if(var>max) max=var; }
}
if(p>1) { var=caut(q,p);
if(var>max) max=var; }
fprintf(g,"%llu",max);
}