Pagini recente » Cod sursa (job #89442) | Cod sursa (job #2614414) | Cod sursa (job #2179947) | Cod sursa (job #2410705) | Cod sursa (job #2671163)
#include <stdio.h>
int v[10][2];///e posibil sa nu fie asta numearul maxim de divizorii primi, dar nu recunosc nimic
int leg( int k, int a ) {
int exp, pow, nr;
exp = 0;
pow = k;
nr = 1;
while( pow <= a ) {
exp += nr;
nr++;
pow *= k;
}
return exp;
}
int main() {
FILE *fin, *fout;
fin = fopen( "gfact.in", "r" );
fout = fopen( "gfact.out", "w" );
int st, dr, k, div, q, p, mij, ok, l, i;
fscanf( fin, "%d", &p );
dr = 100;
if( p > dr )
dr = p;
fscanf( fin, "%d", &q );
div = 2;
k = -1;
l = 0;
if( p % div == 0 ) {
k++;
v[k][0] = p;
}
while( p % div == 0 ) {
v[0][1]++;
p /= div;
}
if( v[k][0] == div )
v[k][1] *= q;
div++;
while( div < p ) {
if( p % div == 0 ) {
k++;
v[k][0] = p;
}
while( p % div == 0 ) {
v[k][1]++;
p /= div;
}
if( v[k][0] == div )
v[k][1] *= q;
div += 2;
}
st = v[k][0];
while( dr - st > 1 ) {
mij = ( dr - st ) / 2 + st;
ok = 1;
for( i = 0; i <= k; i++ ) {
if( leg( v[i][0], mij ) < v[i][1] )
ok = 0;
}
if( ok ) {
dr = mij;
l = mij;
} else {
st = mij;
}
}
fprintf( fout, "%d", l );
return 0;
}