Cod sursa(job #1118969)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 24 februarie 2014 14:06:33
Problema GFact Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 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=1;
        dr=2000000001;
        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=1;
        dr=2000000001;
        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;
}