Cod sursa(job #2085034)
Utilizator | Matei Trandafir MateiTrandafir | Data | 9 decembrie 2017 16:16:53 |
---|---|---|---|
Problema | GFact | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.02 kb |
#include <fstream>
int v1[1000000], v2[1000000], nr;
int main() {
std::ifstream in("gfact.in");
std::ofstream out("gfact.out");
int p, q, d = 2, c;
in >> p >> q;
while (d * d <= p) {
if (p % d == 0) {
v1[nr] = d;
c = 0;
while (p % d == 0) {
p /= d;
c++;
}
v2[nr] = c * q;
nr++;
}
d++;
}
if (p > 1) {
v1[nr] = p;
v2[nr] = q;
nr++;
}
int i, result;
long long r = 0, r2, pas = 1LL << 45, count;
while (pas > 0) {
result = 0;
for (i = 0; i < nr; i++) {
count = 0;
r2 = r + pas;
while (r2 > 0) {
r2 /= v1[i];
count += r2;
}
if (count < v2[i]) {
i = nr;
result = 1;
}
}
if (result) r += pas;
pas >>= 1;
}
out << (r + 1);
}