Pagini recente » Cod sursa (job #1577322) | Cod sursa (job #2609058) | Cod sursa (job #727631) | Cod sursa (job #2079011) | Cod sursa (job #2671185)
#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;
exp = 0;
pow = k;
while( pow <= a ) {
exp += a / pow;
pow *= k;
}
return exp;
}
int main() {
FILE *fin, *fout;
fin = fopen( "gfact.in", "r" );
fout = fopen( "gfact.out", "w" );
int st, dr, k, div, n, q, p, mij, ok, l, i, e;
fscanf( fin, "%d", &n );
dr = 100;
if( p > dr )
dr = p;
fscanf( fin, "%d", &q );
p = 2;
k = -1;
while (p * p <= n) {
e = 0;
while (n % p == 0) {
n = n / p;
++e;
}
if (e > 0) {
k++;
v[k][0] = p;
v[k][1] = e * q;
}
++p;
}
if (n > 1){
k++;
v[k][0] = p;
v[k][1] = q;
}
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;
}