Cod sursa(job #1119025)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 24 februarie 2014 14:36:20
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
long long put, st, dr, mij, p, q, v, Max, cop, nr, i, sol, ok;
int main()
{
    f>>p>>q;
    if (p==1)
    {
        g<<1;
        return 0;
    }

    for (i=2; 1LL*i*i<=p; i++)
    {
        put=0;
        ok=0;
        while (p%i==0)
        {
           ok=1;
           put++;
           p/=i;
        }
        st=0;
        dr=40000000000001;
        if (ok==1)
            while(st<=dr)
            {
                nr=0;
                mij=(st+dr)/2;
                for (cop=i; cop<=mij; cop=1LL*cop*i)
                    nr+=mij/cop;
                if (nr<1LL*put*q)
                    st=mij+1;
                else
                {
                    sol=mij;
                    dr=mij-1;
                }
            }
        if (Max < sol)
            Max = sol;
    }

    if(p!=1)
    {
        st=0;
        dr=40000000000001;
        while(st<=dr)
        {
            nr=0;
            mij=(st+dr)/2;
            for (cop=p; cop<=mij; cop=1LL*cop*p)
                nr+=mij/cop;
            if (nr<q)
                st=mij+1;
            else
            {
                sol=mij;
                dr=mij-1;
            }
        }
        if (Max < sol)
            Max = sol;
    }

    g<<Max;
    return 0;
}