Pagini recente » Cod sursa (job #2276638) | Cod sursa (job #1338828) | Cod sursa (job #998978) | Cod sursa (job #2966630) | Cod sursa (job #2671166)
#include <stdio.h>
#define MAXX 46000
char ciur[MAXX + 1];
int nrprime[MAXX];
int cautbin( int div, int exp ) {
long long st, dr, mij, elem;
int exp2;
st = 0;
dr = (long long)exp * div;
while ( dr - st > 1 ) {
exp2 = 0;
mij = ( dr + st ) / 2;
elem = div;
while ( elem <= mij ) {
exp2 += mij / elem;
elem *= div;
}
if ( exp2 < exp ) {
st = mij;
} else {
dr = mij;
}
}
return dr;
}
long long descp( int n, int put ) {
int i = 0, exp;
long long rasp, x = 1;
while ( n > 1 && nrprime[i] * nrprime[i] <= n ) {
exp = 0;
while ( n % nrprime[i] == 0 ) {
n /= nrprime[i];
exp++;
}
exp *= put;
if ( exp > 0 ) {
rasp = cautbin( nrprime[i], exp );
if ( rasp > x ) {
x = rasp;
}
}
i++;
}
if ( n > 1 ) {
rasp = cautbin( n, put );
if ( rasp > x )
x = rasp;
}
return x;
}
int main()
{
FILE *fin, *fout;
int p, q, i, nr, j;
fin = fopen( "gfact.in", "r" );
fout = fopen( "gfact.out", "w" );
fscanf( fin, "%d%d", &p, &q );
nr = 0;
for ( i = 2; i <= MAXX; i++ ) {
if ( ciur[i] == 0 ) {
nrprime[nr] = i;
nr++;
for ( j = i * i; j <= MAXX; j += i ) {
ciur[j] = 1;
}
}
}
fprintf( fout, "%lld", descp( p, q ) );
fclose( fin );
fclose( fout );
return 0;
}