Pagini recente » Cod sursa (job #1340875) | Cod sursa (job #2678280) | Cod sursa (job #2652508) | Cod sursa (job #2933308) | Cod sursa (job #169240)
Cod sursa(job #169240)
#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) {
//cout << t << " " << f << endl;
/*int p = 1;
int r = f;
while (p != r) {
//cout << p << " " << r << endl;
int q = (p + r) / 2;
if (putere(q * t, t) < f)
p = q + 1;
else
r = q;
}
//cout << p*t << endl;
if (m < p*t)
m = p*t;*/
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;
//cout << i*t << endl;
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 <= 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;
}
ofstream fout("gfact.out");
fout << m << endl;
fout.close();
return 0;
}