Pagini recente » Cod sursa (job #1071102) | Cod sursa (job #1694817) | Cod sursa (job #1753891) | Cod sursa (job #1186120) | Cod sursa (job #801969)
Cod sursa(job #801969)
#include <stdio.h>
#include<math.h>
int nr(int n,int b)
{
int a=0;
while(n>0)
{
a+=n/b;
n/=b;
}
return a;
}
int caut(int n,int b)
{
int pas=1,i,ii,a=0;
while(a<=b)
{
a=nr(pas,n);
if(a<=b)
{
i=pas;
ii=a;
}
pas*=n;
}
if(ii<b)
i+=(b-ii)*n;
if(ii>b)
i-=(ii-b)*2;
return i;
}
int main()
{
FILE *in,*out;
int a,b,max=0,i,c,umax=0,ad=1;
in=fopen("gfact.in","r");
out=fopen("gfact.out","w");
fscanf(in,"%d%d",&a,&b);
while(a%2==0&&a!=0)
{
a/=2;
ad*=2;
}
if(ad>1)
{
max=caut(2,ad/2*b);
if(max>umax)
{
umax=max;
}
}
c=sqrt(a);
for(i=3;i<=c&&a>1;i+=2)
{
ad=1;
while(a%i==0)
{
a/=i;
ad*=2;
}
if(ad>1)
{
max=caut(i,b*ad/2);
if(max>umax)
umax=max;
}
}
if(a>1)
{
max=caut(a,b);
if(max>umax)
umax=max;
}
fprintf(out,"%d",umax);
return 0;
}