Cod sursa(job #2284607)

Utilizator mircearoataMircea Roata Palade mircearoata Data 17 noiembrie 2018 11:55:18
Problema GFact Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>

using namespace std;

ifstream in("gfact.in");
ofstream out("gfact.out");

long long p, q, d = 2;

long long b[15], e[15], sz;

bool possible(long long x)
{
    for(long long i = 1; i <= sz; i++)
    {
        long long baza = b[i];
        long long exp = 0;
        while(x/baza)
        {
            exp += x/baza;
            baza *= b[i];
        }
        if(exp < e[i])
            return false;
    }
    return true;
}

long long cautbin(long long l, long long r)
{
    while(l < r)
    {
        long long m = (l+r) / 2;
        if(possible(m))
            r = m;
        else
            l = m+1;
    }
    return r;
}

int main()
{
    in >> p >> q;
    while(d * d <= p)
    {
        if(p % d == 0)
        {
            long long exp = 0;
            while(p % d == 0)
            {
                exp++;
                p /= d;
            }
            b[++sz] = d;
            e[sz] = exp * q;
        }
    }
    if(p != 1)
    {
        b[++sz] = p;
        e[sz] = q;
    }
    out << cautbin(0, (1 << 30));
    return 0;
}