Cod sursa(job #2828831)

Utilizator lolismekAlex Jerpelea lolismek Data 8 ianuarie 2022 00:41:38
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>

#define ll long long

using namespace std;

ifstream fin("gfact.in");
ofstream fout("gfact.out");

ll get_maxdiv(ll x){
    ll rasp = 1, div = 2;
    while(div * div <= x){
        if(x % div == 0){
            while(x % div == 0) x /= div;
            rasp = max(rasp, div);
        }
        div++;
    }
    if(x > 1) rasp = max(rasp, x);
    return rasp;
}

ll get_ap(ll n, ll d){
    ll cnt = 0;
    while(n % d == 0) n /= d, cnt++;
    return cnt;
}

ll exponent(ll n, ll d){
    ll s = 0, p = d;
    while(p <= n) s += (n / p), p *= d;
    return s;
}

int main(){
    ll p, q;
    fin >> p >> q;
    ll d = get_maxdiv(p), ap = get_ap(p, d) * q;
    long long st = 1, dr = (1ll << 62), ans = 0;
    while(st <= dr){
        ll mij = (st + dr) / 2;
        if(exponent(mij, d) >= ap) dr = mij - 1, ans = mij - (mij % d);
        else st = mij + 1;
    }
    fout << ans;
    return 0;
}