Pagini recente » Cod sursa (job #1584149) | Cod sursa (job #418081) | Cod sursa (job #2383750) | Cod sursa (job #1132527) | Cod sursa (job #126802)
Cod sursa(job #126802)
#include <stdio.h>
int main()
{ int p,q,d,i,j,max=0,m,l,cd,ok=0,dr,st,c;
FILE*f=fopen("gfact.in","r");
FILE*g=fopen("gfact.out","w");
fscanf(f,"%d%d",&p,&q);
for (d=2;d*d<=p;d++)
{
c=0;
for(c=0;p%d==0;c++,p=p/d);
if(c!=0)
{
c=c*q;
st=1;
ok=0;
dr=2000000000;
while(st<=dr)
{
l=0;
cd=d;
m=(st+dr)/2;
while(m/cd)
{
l=l+m/cd;
cd=cd*d;
}
if(l==c)
{
while(m%d) m--;
if(m>max) max=m;
ok=1; break;
}
else if(l>c) dr=m-1;
else st=m+1;
}
if(ok==0 && st>max) max=st;
}
}
if(p!=1)
{
st=1;
dr=2000000000;
ok=0;
while(st<=dr)
{
l=0;
cd=p;
m=(st+dr)/2;
while(m/cd)
{
l=l+m/cd;
cd=cd*p;
}
if(l==q) { while(m%p) m--; if(m>max) max=m; ok=1; break;}
else if(l>q) dr=m-1;
else st=m+1;
}
}
if(ok==0 && st>max) max=st;
fprintf(g,"%d",max);
}