Pagini recente » Cod sursa (job #2871240) | Cod sursa (job #1148409) | Cod sursa (job #697334) | Cod sursa (job #805742) | Cod sursa (job #2690384)
#include <fstream>
#define MAX 45000
using namespace std;
ifstream cin( "gfact.in" );
ofstream cout( "gfact.out" );
int ciur[ MAX + 1 ];
int d[ MAX ], poz;
long long caut( int div, int exp ){
long long st = 0, mij, sol;
long long dr = ( long long )exp * div;
while( dr - st > 1 ) {
mij = ( st + dr ) >> 1;
sol = div;
int f = 0;
while( sol <= mij ){
f += mij / sol;
sol *= div;
}
if( f < exp )
st = mij;
else dr = mij;
}
return dr;
}
void eratostene(){
for( int i = 2; i <= MAX; i++ ){
if( ciur[ i ] == 0 ){
d[ poz ] = i;
poz++;
for( int j = i * i; j <= MAX; j += i )
ciur[ j ] = 1;
}
}
}
int main ()
{
int i, e, p, q;
long long sol, b;
eratostene();
cin >> p >> q;
b = 1;
i = 0;
while( p > 1 && d[ i ] * d[ i ] <= p ){
e = 0;
while( p % d[ i ] == 0 ){
p /= d[ i ];
e++;
}
e *= q;
if( e > 0 ){
sol = caut( d[ i ], e );
if ( sol > b )
b = sol;
}
i++;
}
if( p > 1 ){
sol = caut( p, q );
if ( sol > b )
b = sol;
}
cout << sol << '\n';
return 0;
}