Cod sursa(job #801969)

Utilizator hrazvanHarsan Razvan hrazvan Data 25 octombrie 2012 15:52:47
Problema GFact Scor 35
Compilator c Status done
Runda Arhiva de probleme Marime 1.21 kb
#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;
}