Pagini recente » Cod sursa (job #1344844) | Cod sursa (job #657947) | Cod sursa (job #1370543) | Cod sursa (job #389943) | Cod sursa (job #378743)
Cod sursa(job #378743)
#include<cstdio>
#define VAL 1000000000000000LL
#define ll long long
ll int i , j , k , n , m , p , q , maxs;
bool ok ( ll int x , ll int fact , ll int pows ) {
ll int i , result = 0;
for( i = fact ; i <= x ; i *= fact )
result += x / i;
if ( result >= pows ) return true;
return false;
}
ll int check ( int factor , int power )
{
ll int lf , rt , mid , last = 0;
for( lf = 1 , rt = VAL ; lf <= rt ; )
{
mid = ( lf + rt ) >> 1;
if ( ok ( mid , factor , power) ) last = mid , rt = mid -1 ;
else lf = mid + 1;
}
return last;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d %d",&p,&q);
for( i = 2 ; i * i <= p ; ++i )
{
if ( p % i == 0 )
{
int cnt = 0;
while ( p % i == 0 ) p /= i , cnt++;
if ( check ( i , cnt * q ) > maxs )
maxs = check ( i , cnt * q ) ;
}
}
if ( p > 1 )
if ( check ( p , q ) > maxs ) maxs = check ( p , q ) ;
printf("%lld\n",maxs);
return 0;
}