Pagini recente » Cod sursa (job #2569784) | Cod sursa (job #2955485) | Cod sursa (job #1288983) | Cod sursa (job #2228733) | Cod sursa (job #1591198)
#include <stdio.h>
using namespace std;
int p, q;
int find(int f, int p)
{
long long st = 0, dr = f * p;
while(st<=dr)
{
long long mij=(st+dr)/2;
int nr=0;
int aux = f;
while(mij>=aux)
{
nr = nr + mij/aux;
aux = aux * f;
}
if(nr<p)
st = mij+1;
else
dr = mij-1;
}
return st;
}
int main()
{
freopen("gfact.in", "r", stdin);
freopen("gfact.out", "w", stdout);
scanf("%d %d", &p, &q);
long long ans = 0;
int f = 2;
while(p > 1)
{
int pow = 0;
if(f * f > p)
f = p;
while(p%f==0)
{
pow++;
p = p / f;
}
long long rez = find(f, pow*q);
if(rez > ans)
ans = rez;
f++;
}
printf("%d", ans);
return 0;
}