Cod sursa(job #3152899)

Utilizator rexlcdTenea Mihai rexlcd Data 27 septembrie 2023 01:52:43
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

vector < pair < int, int > > fact;

int main() {
    ifstream f("gfact.in");
    ofstream g("gfact.out");

    int p, q; f >> p >> q;
    for(int i = 2; p > 1 && i * i <= p; i++) {
        int k = 0;
        while(p % i == 0) {
            k++;
            p /= i;
        }
        if(k) {
            fact.push_back({i, k * q});
        }
    }
    if(p > 1) {
        fact.push_back({p, q});
    }
    long long l = 1, r = 1e18, ans = 0;
    while(l <= r) {
        long long m = (l + r) / 2, ok = 1;
        for(auto t: fact) {
            long long e = 0, p = t.first;
            while(p <= m) {
                e += m / p;
                p *= t.first;
            }
            if(e < t.second) {
                ok = 0;
                break;
            }
        }
        if(ok) {
            ans = m;
            r = m - 1;
        }
        else {
            l = m + 1;
        }
    }
    g << ans << '\n';
    f.close();
    g.close();
    return 0;
}