Pagini recente » Cod sursa (job #2688328) | Cod sursa (job #765165) | Cod sursa (job #2119600) | Cod sursa (job #144571) | Cod sursa (job #3233565)
#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;
}