Pagini recente » Cod sursa (job #1177022) | Cod sursa (job #400801) | Cod sursa (job #1429623) | Cod sursa (job #1643013) | Cod sursa (job #1537179)
#include <bits/stdc++.h>
using namespace std;
int p, q, F, Fq;
int gpf(int x)
{
int d = 2, io = 0;
do
{
if (x % d == 0)
io = d;
while (x % d == 0)
x /= d;
if (d * d < 0 && d * d >= x)
return max(io, x);
d ++;
}
while(x != 1);
return io;
}
long long nf(long long x)
{
long long s = 0LL;
while(x)
{
x /= F;
s += x;
}
return s;
}
long long bs(long long fq)
{
long long i = 0, p = 1LL;
for (i = 1; i <= 35; ++ i)
p *= 2;
i = 0;
while(p)
{
if(nf(i + p) < fq)
i += p;
p /= 2;
}
return i;
}
int main()
{
freopen("gfact.in ", "r", stdin);
freopen("gfact.out", "w", stdout);
scanf("%d %d", &p, &q);
F = gpf(p);
int io = p;
while (io % F == 0)
{
++ Fq;
io /= F;
}
long long k = bs(q * Fq);
printf("%lld\n", k + 1);
return 0;
}