Pagini recente » Cod sursa (job #2058275) | Cod sursa (job #3256316) | Cod sursa (job #3223925) | Cod sursa (job #190739) | Cod sursa (job #2906600)
#include <fstream>
#include <climits>
struct factor {
unsigned int val, pow;
};
int main() {
std::ifstream fin("gfact.in");
std::ofstream fout("gfact.out");
unsigned long long p, q;
factor factori[1000];
unsigned long long factorC = 0;
fin >> p >> q;
unsigned long long cop = p;
for(unsigned long long i = 2; cop > 1; ++i) {
if(!(cop % i)) {
cop /= i;
factor& fac = factori[factorC++];
fac.val = i;
fac.pow = 1;
while(!(cop % i)) {
++fac.pow;
cop /= i;
}
}
}
unsigned long long start = 1, end = 10000000000;
while(start != end) {
unsigned long long mid = (start + end) >> 1;
bool valid = true;
for(unsigned long long i = 0; i < factorC; ++i) {
unsigned long long num = 0;
for(unsigned long long pow = factori[i].val; pow <= mid; pow *= factori[i].val)
num += mid / pow;
valid = num >= q * factori[i].pow;
}
if(valid) {
end = mid;
} else {
start = mid + 1;
}
}
fout << start;
fin.close();
fout.close();
return 0;
}