Cod sursa(job #2085034)

Utilizator MateiTrandafirMatei Trandafir MateiTrandafir Data 9 decembrie 2017 16:16:53
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>

int v1[1000000], v2[1000000], nr;

int main() {
    std::ifstream in("gfact.in");
    std::ofstream out("gfact.out");
    int p, q, d = 2, c;
    in >> p >> q;
    while (d * d <= p) {
        if (p % d == 0) {
            v1[nr] = d;
            c = 0;
            while (p % d == 0) {
                p /= d;
                c++;
            }
            v2[nr] = c * q;
            nr++;
        }
        d++;
    }
    if (p > 1) {
        v1[nr] = p;
        v2[nr] = q;
        nr++;
    }
    int i, result;
    long long r = 0, r2, pas = 1LL << 45, count;
    while (pas > 0) {
        result = 0;
        for (i = 0; i < nr; i++) {
            count = 0;
            r2 = r + pas;
            while (r2 > 0) {
                r2 /= v1[i];
                count += r2;
            }
            if (count < v2[i]) {
                i = nr;
                result = 1;
            }
        }
        if (result) r += pas;
        pas >>= 1;
    }
    out << (r + 1);
}