Pagini recente » Cod sursa (job #536559) | Cod sursa (job #2246422) | Cod sursa (job #185692) | Cod sursa (job #1221419) | Cod sursa (job #169251)
Cod sursa(job #169251)
#include <iostream>
#include <fstream>
using namespace std;
int P, Q;
long long putere(long long x, long long t) {
long long r(0);
long long aux = t;
while (aux <= x) {
r += x / aux;
aux *= t;
}
return r;
}
long long pp(long long t, long long f) {
long long i, step;
for (step = 1; step <= f; step <<= 1)
;
for (i = 1; step; step >>= 1)
if ((i + step <= f) && (putere((i + step) * t, t) <= f))
i += step;
return i*t;
}
int main(int argc, char *argv[]) {
ifstream fin("gfact.in");
fin >> P >> Q;
fin.close();
int aux = P;
int t(0);
while (aux % 2 == 0) {
++t;
aux /= 2;
}
long long m = -1;
if (t) {
long long vah = pp(2, t*Q);
if (vah > m)
m = vah;
}
int i = 3;
while (i*i <= aux) {
t = 0;
while (aux % i == 0) {
++t;
aux /= i;
}
if (t) {
long long vah = pp(i, t*Q);
if (vah > m)
m = vah;
}
i += 2;
}
if (aux > 1) {
long long vah = pp(aux, Q);
if (vah > m)
m = vah;
}
ofstream fout("gfact.out");
fout << m << endl;
fout.close();
return 0;
}