Pagini recente » Cod sursa (job #341199) | Cod sursa (job #2693606) | Cod sursa (job #2887074) | Cod sursa (job #1344562) | Cod sursa (job #63768)
Cod sursa(job #63768)
#include<stdio.h>
#include<values.h>
int main()
{
long long unsigned p,q,a,sol,j,nr,r,k=2,x,max=0,pr,i,m;
FILE*f=fopen("gfact.in","r");
FILE*g=fopen("gfact.out","w");
fscanf(f,"%llu %llu",&p,&q);
k=2;
x=p;
for(k=2;k*k<=p;++k)
{
r=0;
while(p%k==0) { ++r; p/=k;}
if(r!=0)
{
r*=q;
i=1; j=MAXLONG;
while(i<=j)
{
m=(i+j)/2;
nr=0; pr=k;
while(m/pr!=0) { nr+=(m/pr); pr*=k;}
if(nr==r)
{
//daca am gasit
while(m%k!=0) m--;
break;
}
else if (nr>r) j=m-1;
else i=m+1;
}
if(m>max) max=m;
}
}
if(p>1)
{
r=q;
i=1; j=MAXLONG;
while(i<=j)
{
m=(i+j)/2;
nr=0; pr=k;
while(m/pr!=0) { nr+=(m/pr); pr*=k;}
if(nr==r)
{
//daca am gasit
while(m%k!=0) m--;
break;
}
else if (nr>r) j=m-1;
else i=m+1;
}
if(m>max) max=m;
}
fprintf(g,"%llu",max);
return 0;
}