Pagini recente » Cod sursa (job #2828641) | Cod sursa (job #2830095) | Cod sursa (job #1845889) | Cod sursa (job #2036065) | Cod sursa (job #2765709)
#include <fstream>
#include <bitset>
#include <unordered_map>
#include <vector>
#include <iostream>
using namespace std;
unordered_map<long long, long long> mp;
long long p, cp, q;
void read() {
ifstream f("gfact.in");
f >> p >> q;
cp = p;
f.close();
}
vector<long long> v;
long long ans;
bool ok(long long x) {
long long nr;
long long cy;
for (long long y : v) {
nr = 0;
cy = y;
while (x >= cy) {
nr += x / cy;
cy *= y;
}
if (mp[y] > nr)
return 0;
}
return 1;
}
void solve() {
long long d = 2;
while (d * d <= p) {
if (p % d == 0) {
v.push_back(d);
while (p % d == 0)
p /= d, mp[d]++;
}
d++;
}
if (p > 1) {
v.emplace_back(p);
mp[p] = 1;
}
int i;
for (i = 0; i < v.size(); i++)
mp[v[i]] *= q;
long long st, dr, mij;
st = 1, dr = cp * q;
while (st <= dr) {
mij = (st + dr) / 2;
if (ok(mij))
dr = mij - 1;
else st = mij + 1;
}
ans = st;
}
void output() {
ofstream g("gfact.out");
g << ans;
g.close();
}
int main() {
read();
solve();
output();
return 0;
}