Cod sursa(job #3152895)

Utilizator rexlcdTenea Mihai rexlcd Data 27 septembrie 2023 00:57:43
Problema GFact Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <cmath>

using namespace std;

unordered_map < int, int > fact;

inline int logbase(int base, int x) {
    return (int)(log(x) / log(base));
}

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

    int p, q; f >> p >> q;
    for(int i = 2, t = p; p > 1 && i * i <= t; i++) {
        int k = 0;
        while(p % i == 0) {
            k++;
            p /= i;
        }
        if(k) {
            fact[i] = k * q;
        }
    }
    if(p > 1) {
        fact[p] = q;
    }
    int l = 1, r = 200000, m = 0;
    while(l <= r) {
        m = (l + r) / 2;
        unordered_map < int, int > aux;
        for(int i = 2; i <= m; i++) {
            for(auto j: fact) {
                if(i % j.first == 0) {
                    aux[j.first] += logbase(j.first, i);
                }
            }
        }
        bool ok = true;
        for(auto i: fact) {
            if(aux[i.first] < i.second) {
                ok = false;
            }
        }
        if(ok) {
            r = m - 1;
        }
        else {
            l = m + 1;
        }
    }
    g << m << '\n';
    f.close();
    g.close();
    return 0;
}