Pagini recente » Cod sursa (job #2391958) | Cod sursa (job #1399508) | Cod sursa (job #2449642) | Cod sursa (job #1052999) | Cod sursa (job #2664513)
#include <stdio.h>
#include <stdlib.h>
int v[2][10];
int cautare(int n, int i){
int min, max, mij, cnt, ac, nrap;
min = 0;
max = n;
while((max - min) > 1){
mij = (min + max) / 2;
ac = 0;
nrap = 1;
for(cnt = v[0][i]; cnt <= mij; cnt *= v[0][i]){
ac = ac + (mij * nrap) / cnt;
nrap++;
}
if((n - 1) < (mij + ac)){
max = mij;
}else{
min = mij;
}
}
return min;
}
int main()
{
FILE *fin, *fout;
int p, q, d, i, maxi, cnt, poz, ac, nrap;
long long max;
fin = fopen("gfact.in", "r");
fscanf(fin, "%d%d", &p, &q);
fclose(fin);
d = 2;
i = 0;
while((d * d) <= p){
if((p % d) == 0){
v[0][i] = d;
while((p % d) == 0){
p /= d;
v[1][i]++;
}
i++;
}
d++;
}
if(1 < p){
v[0][i] = p;
v[1][i] = 1;
i++;
}
maxi = i;
max = 0;
for(i = 0; i < maxi; i++){
v[1][i] *= q;
poz = cautare(v[1][i] + 1, i);
ac = 0;
nrap = 1;
for(cnt = v[0][i]; cnt <= poz; cnt *= v[0][i]){
ac = ac + (poz * nrap) / cnt;
nrap++;
}
if((poz + ac) < v[1][i]){
poz++;
}
if(max < ((long long)poz * v[0][i])){
max = (long long)poz * v[0][i];
}
}
fout = fopen("gfact.out", "w");
fprintf(fout, "%lld", max);
fclose(fout);
return 0;
}