Cod sursa(job #1842079)

Utilizator VasilescuVasilescu Eliza Vasilescu Data 6 ianuarie 2017 14:37:56
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include<cstdio>
#include<values.h>
int main()
{
    unsigned long long p,q,a,sol,j,nr,r,k=2,x,maxx=0,pr,i,m;
    FILE*fin=fopen("gfact.in","r");
    FILE*fout=fopen("gfact.out","w");
    fscanf(fin,"%llu %llu",&p,&q);

    for(k=2; k*k<=p; ++k)
    {
        r=0;
        while(p%k==0)
        {
            ++r;
            p/=k;
        }
        if(r!=0)
        {
            r=r*q;
            i=1;
            j=2*r*k;
            while(i<=j)
            {
                m=(i+j)/2;
                nr=0;
                pr=k;
                while((m/pr)!=0)
                {
                    nr+=(m/pr);
                    pr*=k;
                }
                if(nr==r)
                {
                    while(m%k!=0)
                        m--;
                    break;
                }
                else if(nr>r)
                    j=m-1;
                else
                i=m+1;
            }
            if(m>maxx)
                maxx=m;
        }
    }
    if(p>1)
    {
        k=p;
        r=q;
        i=1;
        j=2*r*k;
        while(i<=j)
        {
            m=(i+j)/2;
            nr=0;
            pr=k;
            while((m/pr)!=0)
            {
                nr+=(m/pr);
                pr*=k;
            }
            if(nr==r)
            {
                while(m%k!=0) m--;
                break;
            }
            else if(nr>r) j=m-1;
            else i=m+1;
        }
        if(m>maxx)
            maxx=m;
    }
    fprintf(fout,"%llu",maxx);
    return 0;
}