Cod sursa(job #1587503)

Utilizator armandpredaPreda Armand armandpreda Data 2 februarie 2016 10:04:56
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
using namespace std;
ifstream cin("gfact.in");
ofstream cout("gfact.out");
int p, q;
long long find_fact(int f, int p)
{
    long long st = 0, dr = 1ll * f * p;
    while(st<=dr)
    {
        long long mij = (st+dr)/2;
        int nr = 0;
        long long pf = f;
        while(mij >= pf)
        {
            nr = nr + mij / pf;
            pf = pf * f;
        }
        if(nr < p)
            st = mij + 1;
        else
            dr = mij - 1;
    }
    return st;
}
int main()
{
    cin>>p>>q;
    long long ans = 0;
    int f = 2;
    while(p > 1)
    {
        int put = 0;
        if(f * f > p)
            f = p;
        while(p%f==0)
        {
            put++;
            p = p / f;
        }
        long long rez = find_fact(f, put*q);
        if(rez > ans)
            ans = rez;
        f++;
    }
    cout<<ans;
    return 0;
}