Pagini recente » Cod sursa (job #1840021) | Cod sursa (job #56517) | Cod sursa (job #738428) | Cod sursa (job #478772) | Cod sursa (job #2669621)
#include <bits/stdc++.h>
using namespace std;
int p, q, d[15], e[15], nd;
long long ans;
void desc(int n)
{
int dv = 2;
while(dv * dv <=n){
if (n%dv==0){
d[nd] = dv;
while(n%dv==0){
e[nd] ++;
n /= dv;
}
nd ++;
}
dv ++;
}
if (n > 1){
d[nd] = n;
e[nd++] = 1;
}
}
long long pwr(long long n, int p)
{
long long r = 0;
while(n >= p){
r += n/p;
n /= p;
}
return r;
}
bool divfact(long long n)
{
for (int i=0;i<nd;i++){
if (pwr(n, d[i]) < e[i] * q)
return false;
}
return true;
}
long long caut()
{
long long r = 0, step = 1LL << 45;
while(step){
if (!divfact(r + step))
r += step;
step /= 2;
}
r ++;
return r;
}
int main() {
freopen("gfact.in", "r", stdin);
freopen("gfact.out", "w", stdout);
scanf("%d%d", &p, &q);
desc(p);
ans = caut();
printf("%lld", ans);
return 0;
}