Pagini recente » Cod sursa (job #183304) | Cod sursa (job #1391274) | Cod sursa (job #425683) | Cod sursa (job #2265214) | Cod sursa (job #3296452)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int p, q, fact[22], ex[22], nrf;
static inline void Desc(int n) {
int d = 2;
while(d * d <= n) {
if(n % d == 0) {
int e = 0;
while(n % d == 0) {
e++;
n /= d;
}
nrf++;
fact[nrf] = d;
ex[nrf] = e;
}
d++;
}
if(n > 1) {
nrf++;
fact[nrf] = n;
ex[nrf] = 1;
}
}
static inline int LaGrande(int a, int n) {
int put = a;
int ex = 0;
while(put <= n) {
ex += n / put;
put *= a;
}
return ex;
}
static inline bool Verif(int n) {
for(int i = 1; i <= nrf; i++) {
if(LaGrande(fact[i], n) < ex[i]) return false;
}
return true;
}
int main() {
fin >> p >> q;
Desc(p);
for(int i = 1; i <= nrf; i++) ex[i] *= q;
int st = 1, dr = 2000000000;
int rasp = st;
while(st <= dr) {
int mij = st + (dr - st) / 2;
if(Verif(mij)) {
rasp = mij;
dr = mij - 1;
}
else st = mij + 1;
}
fout << rasp;
return 0;
}