Pagini recente » Cod sursa (job #1312079) | Cod sursa (job #1409853) | Cod sursa (job #2361824) | Cod sursa (job #2968040) | Cod sursa (job #1593535)
#include <cstdio>
using namespace std;
long long int cautbin(long long f, long long p);
long long int div(long long int n, long long int d);
long long int p, q, rez=0;
int main()
{
freopen("gfact.in", "r", stdin);
freopen("gfact.out", "w", stdout);
scanf("%lld %lld", &p, &q);
long long int f = 2, r=0, pow = 0;
while (p > 1)
{
r = 0;
pow = 0;
if (f*f > p)
f = p;
while (p%f == 0)
{
pow++;
p = p / f;
}
if (pow>0)
r = cautbin(f, pow*q);
if (r > rez)
rez = r;
f++;
}
printf("%lld", rez);
return 0;
}
long long int cautbin(long long f, long long b)
{
long long int i = 0;
long long int pas = 1<<30;
pas *= pas;
while (pas != 0)
{
if (div(i + pas, f) < b && i+pas<=b*f)
i += pas;
pas /= 2;
}
return i + 1;
}
long long int div(long long int n,long long int d)
{
long long int r = 0;
while (n >= d)
{
r += n / d;
n /= d;
}
return r;
}