Cod sursa(job #3233565)

Utilizator TomMMMMatei Toma TomMMM Data 3 iunie 2024 20:11:20
Problema GFact Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

ifstream fin("gfact.in");
ofstream fout("gfact.out");
struct div_prim{
    int div;
    int put;
};
vector<div_prim> get_div(int x, int y){
    vector <div_prim> div;
    int d = 2;
    while(x != 1){
        int p = 0;
        while(x % d == 0){
            x /= d;
            p++;
        }
        if(p != 0){
            div.push_back({d, p * y});
        }
        d++;
        if(d * d > x) d = x;
    }
    return div;
}
int putere(int x, int div){
    if(x < div){
        return 0;
    }
    return putere(x / div, div) + x / div;
}

int get_minimum(int di, int put){
    int L = 1, R = 20000000;
    int sol = 2000000000;
    while(L <= R){
        int mij = (L + R) / 2;
        if(putere(mij, di) >= put){
            sol = mij;
            R = mij - 1;
        }else{
            L = mij + 1;
        }
    }
    return sol;
}
int main() {
    int x, y;
    fin >> x >> y;
    auto div = get_div(x, y);
    int sol = -1;
    for(auto per: div){
        int di = per.div, put = per.div;
        sol = max(sol, get_minimum(di, put));
    }
    fout << sol;
}