Pagini recente » Cod sursa (job #1737599) | Cod sursa (job #1555748) | Cod sursa (job #2841042) | Cod sursa (job #1301529) | Cod sursa (job #67244)
Cod sursa(job #67244)
#include<stdio.h>
long long int p,q,b,i,pr[45000],e,left,right,mid,eval,e1,j,sol1,sol;
long long int factorizare();
long long int getfact(long long int baza,long long int exponent);
int main()
{
FILE *f,*g;
f=fopen("gfact.in","r");
g=fopen("gfact.out","w");
fscanf(f,"%lld%lld",&p,&q);
factorizare();
fprintf(g,"%lld",sol);
fcloseall();
return 0;
}
long long int factorizare()
{ for(i=2;;i++)
{ if(i*i>p)break;
if(!pr[i])
{ if(p%i==0)
{ e=0;
while(p%i==0){ e++;p/=i;}
sol1=getfact(i,e);
sol=(sol>sol1)?sol:sol1;
for(j=i;;j=j+i)
{ if(j*j>p)break;
pr[j]=1;
}
}
}
}
if(p>1)
sol1=getfact(p,1);
sol=(sol>sol1)?sol:sol1;
return 0;
}
long long int getfact(long long int baza,long long int exponent)
{
long long int left,right,mid,val,exp1;
left=0,right=baza*exponent;
while(right>left+1)
{
mid=(left+right)/2;
val=baza*mid;
exp1=0;
while(val)
{ exp1+=val/baza;
val/=baza;
}
if(exp1<exponent)
left=mid;
else
right=mid;
}
return right*baza;
}