Pagini recente » Cod sursa (job #103907) | Cod sursa (job #1410715) | Cod sursa (job #2190493) | Cod sursa (job #2830039) | Cod sursa (job #169264)
Cod sursa(job #169264)
#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) {
cout << "Try " << (i + step) * t << endl;
if ((i + step <= f) && (putere((i + step) * t, t) <= f))
i += step;
cout << "Got " << putere((i + step) * t, t) << " ? " << f << endl;
cout << "So far " << i << endl;
}
return i*t;*/
long long p = 1;
long long r = f;
while (p != r) {
//cout << p << " " << r << endl;
long long q = (p + r) / 2;
if (putere(q * t, t) < f)
p = q + 1;
else
r = q;
}
//cout << p*t << endl;
return p*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*Q);
if (vah > m)
m = vah;
}
ofstream fout("gfact.out");
fout << m << endl;
fout.close();
return 0;
}