Pagini recente » Cod sursa (job #741512) | Cod sursa (job #531185) | Cod sursa (job #325094) | Cod sursa (job #943935) | Cod sursa (job #1776195)
#include <cstdio>
#define NMax 15
#define ll long long
ll temp[NMax+1];
ll f[NMax+1];
ll g[NMax+1];
bool is_good(ll X)
{
int i;
ll x,expn;
for(i = 1; i <= NMax; ++i) temp[i] = 0;
for(i = 1; i <= f[0]; ++i)
{
expn = 0; x = f[i];
while( X >= x )
{
expn += X/x;
x = x * f[i];
}
temp[i] = expn;
}
for(i = 1; i <= g[0]; ++i)
if( temp[i] < g[i] ) return 0;
return 1;
}
int main(){
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
int i,aux,P,Q;
ll st,mid,dr,B;
scanf("%d %d",&P,&Q);
for(i = 2; i * i <= P; ++i)
if( P % i == 0 )
{
aux = 0;
while( P % i == 0 ) { ++aux; P/=i; }
f[ ++f[0] ] = i;
g[ ++g[0] ] = aux;
}
if( P > 1 ) { f[ ++f[0] ] = P; g[ ++g[0] ] = 1; }
for(i = 1; i <= g[0]; ++i) g[i] = g[i] * Q;
for(st = 1, dr = 1LL<<59; st <= dr; )
{
mid = (st+dr)/2;
if( is_good(mid) ) { B = mid; dr = mid - 1; }
else st = mid + 1;
}
printf("%lld\n", B);
return 0;
}