Cod sursa(job #2906600)

Utilizator DobraVictorDobra Victor Ioan DobraVictor Data 26 mai 2022 19:05:05
Problema GFact Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <climits>

struct factor {
    unsigned int val, pow;
};

int main() {
    std::ifstream fin("gfact.in");
    std::ofstream fout("gfact.out");

    unsigned long long p, q;
    factor factori[1000];
    unsigned long long factorC = 0;
    fin >> p >> q;

    unsigned long long cop = p;
    for(unsigned long long i = 2; cop > 1; ++i) {
        if(!(cop % i)) {
            cop /= i;
            factor& fac = factori[factorC++];
            fac.val = i;
            fac.pow = 1;

            while(!(cop % i)) {
                ++fac.pow;
                cop /= i;
            }
        }
    }
    
    unsigned long long start = 1, end = 10000000000;
    while(start != end) {
        unsigned long long mid = (start + end) >> 1;
        bool valid = true;

        for(unsigned long long i = 0; i < factorC; ++i) {
            unsigned long long num = 0;

            for(unsigned long long pow = factori[i].val; pow <= mid; pow *= factori[i].val)
                num += mid / pow;
            
            valid = num >= q * factori[i].pow;
        }

        if(valid) {
            end = mid;
        } else {
            start = mid + 1;
        }
    }
    fout << start;

    fin.close();
    fout.close();

    return 0;
}