Cod sursa(job #2835415)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 18 ianuarie 2022 18:03:02
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

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

vector < pair<long long, long long> > d;
long long p, q, e, sol;

long long power(long long fact, long long num){
    long long crt = num, add, result = 0;
    do{
        add = fact / crt;
        result += add;
        crt *= num;
    }while(add != 0);
    return result;
}

void solve(long long num, long long put){
    long long st=1, md, dr=(1LL << 60);

    while(st <= dr){
        md = (dr - st) / 2 + st;
        if(power(md, num) >= put)
            dr = md - 1;
        else
            st = md + 1;
    }
    sol = max(sol, st);
}

signed main (){
    fin>>p>>q;
    for(long long i=2; i<=p/i; i++){
        e = 0;
        while(p%i == 0){
            e++;
            p /= i;
        }
        if(e != 0)
            d.push_back({i, e});
    }
    if(p != 1)
        d.push_back({p, 1});

    for(long long i=0; i < (long long)d.size(); i++){
        d[i].second *= q;
        solve(d[i].first, d[i].second);
    }
    fout<<sol;
    return 0;
}