Pagini recente » Cod sursa (job #1406347) | Cod sursa (job #423107) | Cod sursa (job #3160309) | Cod sursa (job #1913010) | Cod sursa (job #126451)
Cod sursa(job #126451)
#include <stdio.h>
int main()
{ int p,q,st,dr,m,nr,cp,d,c=0,factmax=0,qmax=0,fact=1,dmax;
FILE*f=fopen("gfact.in","r");
FILE*g=fopen("gfact.out","w");
fscanf(f,"%d%d",&p,&q);
d=1;
while(p%2==0) { p=p/2; c++; fact=fact*2;}
if(fact>factmax) { factmax=fact; qmax=c; dmax=2;}
while(p!=1)
{
d=d+2;
c=0;
fact=1;
while(p%d==0)
{
c++;
p=p/d;
fact=fact*d;
}
if(fact>factmax) { factmax=fact; qmax=c; dmax=d;}
}
if(d==1) d=2;
q=q*qmax;
st=1;
dr=2000000000;
d=dmax;
while(st<=dr)
{
nr=0;
cp=d;
m=(st+dr)/2;
while(m/cp)
{
nr=nr+m/cp;
cp=cp*d;
}
if (nr==q)
{
while(m%d) m--;
fprintf(g,"%d",m);
return 0;
}
if (nr>q) dr=m-1;
if (nr<q) st=m+1;
}
fprintf(g,"%d",st);
return 0;
}