Pagini recente » Cod sursa (job #2294250) | Cod sursa (job #580269) | Cod sursa (job #2905727) | Cod sursa (job #1306278) | Cod sursa (job #3152629)
#include <bits/stdc++.h>
#define limita 45000
using namespace std;
int divisor, p, q;
bool check (unsigned long long val) {
unsigned long long count, putere;
count = 0;
putere = 1;
while (putere <= val) {
putere *= divisor;
count += val / putere;
}
return (count >= q);
}
void prec () {
bool composed[45005];
vector<int> prime_numbers;
composed[0] = true;
composed[1] = true;
for (int i = 2; i * i <= limita; i++) {
if (composed[i] == false) {
for (int j = i * i; j <= limita; j += i)
composed[j] = true;
}
}
for (int i = 1; i <= limita; i++) {
if (composed[i] == false)
prime_numbers.push_back(i);
}
divisor = p;
for (int i = 0; i <= prime_numbers.size(), prime_numbers[i] * prime_numbers[i] <= p; i++) {
if (p % prime_numbers[i] == 0)
divisor = prime_numbers[i];
}
}
int main() {
ifstream cin("gfact.in");
ofstream cout("gfact.out");
int left, right, mid, ans;
cin >> p >> q;
prec();
left = 1;
right = 600000000000000;
while (left <= right) {
mid = (left + right) / 2;
if (check(mid)) {
ans = mid;
right = mid - 1;
} else
left = mid + 1;
}
cout << ans;
return 0;
}