Pagini recente » Cod sursa (job #1889777) | Cod sursa (job #2430257) | Cod sursa (job #1488728) | Cod sursa (job #1469584) | Cod sursa (job #3315750)
#include <stdio.h>
#include <stdlib.h>
int fact[100], puteri[100];
int factG(int a, int b){
int cnt;
cnt = 0;
while(a > 0){
cnt += a / b;
a /= b;
}
return cnt;
}
int caut_bin(int n){
int st, dr, mij, rez, i;
st = 0;
dr = (1 << 31) - 1;
while(st <= dr){
mij = (st + dr) / 2;
i = 0;
while(i < n && factG(mij, fact[i]) >= puteri[i]){
i ++;
}
if(i >= n){
rez = mij;
dr = mij - 1;
}else{
st = mij + 1;
}
}
return rez;
}
int main()
{
FILE *fin, *fout;
fin = fopen("gfact.in", "r");
fout = fopen("gfact.out", "w");
int p, q, d, ind;
fscanf(fin, "%d%d", &p, &q);
ind = 0;
d = 2;
while(d * d <= p){
if(p % d == 0){
fact[ind] = d;
while(p % d == 0){
p = p / d;
puteri[ind] ++;
}
puteri[ind] *= q;
ind ++;
}
d ++;
}
if(p > 1){
fact[ind] = p;
puteri[ind] = q;
ind ++;
p = 1;
}
fprintf(fout, "%d\n", caut_bin(ind));
return 0;
}