Cod sursa(job #2073676)

Utilizator ContDeRacistAliniateEBlat ContDeRacist Data 23 noiembrie 2017 15:38:11
Problema GFact Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>

using namespace std;

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

long long descb[100], desce[100], nrdiv = 0, p, q;

void desc() {
    if (p % 2 == 0) {
        descb [++nrdiv] = 2;
        while (p % 2 == 0) {
            ++desce[nrdiv];
            p /= 2;
        }
    }
    long long d = 3;
    while (d * d <= p) {
        if (p % d == 0) {
            descb [++nrdiv] = d;
            while (p % d == 0) {
                ++desce[nrdiv];
                p /= d;
            }
        }
        d += 2;
    }
    if (p != 1) {
        descb[++nrdiv] = p;
        ++desce[nrdiv];
    }
}

bool mergee(long long k) {
    long long s;
    for (long long i = 1; i <= nrdiv; ++i) {
        s = 0;
        while (k >= descb[i]) {
            s += (k /= descb[i]);
        }
        if (s < desce[i] * q) {
            return false;
        }
    }
    return true;
}

long long cb () {
    long long pas = 1LL<<60 ;
    long long r = 0;
    while(pas) {
        if (!mergee(r + pas)) {
            r += pas;
        }
        pas /= 2;
    }
    return 1 + r;
}

int main()
{
    cin >> p >> q;
    desc();
    cout << cb();
    return 0;
}