Cod sursa(job #2284616)

Utilizator mircearoataMircea Roata Palade mircearoata Data 17 noiembrie 2018 11:57:44
Problema GFact Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 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 n)
{
    long long i, step;
    for (step = 1; step < n; step <<= 1);
    for (i = n; step; step >>= 1)
        if (i - step < n && possible(i - step))
           i -= step;
    return i;
}

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(1 << 30);
    return 0;
}