Cod sursa(job #1118626)

Utilizator margikiMargeloiu Andrei margiki Data 24 februarie 2014 12:18:57
Problema GFact Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
# include <fstream>
# include <cmath>
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
long long p,k,Max,sol,r,q;
long long cauta_bin(long long cs, long long k, long long r)
{
    long long ci=1,nr=0,IMP=0,mij=0,sol=0;
    while(ci<=cs)
    {
        mij=(ci+cs)/2;
        nr=0; IMP=k;
        while(mij/IMP>0)
        {
            nr+=(mij/IMP);
            IMP*=k;
        }
        if (nr>=r)
        {
            cs=mij-1;
            sol=mij;
        }
            else ci=mij+1;
    }
    return sol;
}
int main()
{
    f>>p>>q;
    for(k=2; k*k<=p; ++k)
    {
        r=0;
        while(p%k==0) {++r; p/=k;}
        if(r!=0)
        {
            sol=cauta_bin(2*r*k*q,k,r) ;
            if (sol>Max) Max=sol;
        }
    }
    if(p>1)
    {
        k=p;
        long long r=q;
        sol=cauta_bin(2*r*k,k,r);
        if (sol>Max) Max=sol;
    }
    g<<sol<<'\n';
    return 0;
}