Pagini recente » Cod sursa (job #1104617) | Cod sursa (job #222814) | Cod sursa (job #3244252) | Cod sursa (job #2722443) | Cod sursa (job #2661566)
#include <iostream>
#include <stdio.h>
using namespace std;
int maxfactprim(int n) {
int i, max1;
i = 2;
while (i * i <= n && n > 1) {
if (n % i == 0) {
while (n % i == 0)
n /= i;
max1 = i;
}
i++;
}
if (n > 1)
max1 = n;
return max1;
}
int test(int x, int div) {
int sol;
sol = 0;
while (x) {
sol += x / div;
x /= div;
}
return sol;
}
int cautbin(int div, int q) {
int st, dr, sol, mij, nr;
st = 1;
dr = div * q;
sol = -1;
while (st <= dr) {
mij = (st + dr) / 2;
nr = test(mij, div);
if (nr >= q) {
sol = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
return sol;
}
int main() {
FILE *fin, *fout;
int p, q, divmax;
fin = fopen("gfact.in", "r");
fscanf(fin, "%d%d", &p, &q);
fclose( fin );
divmax = maxfactprim(p);
fout = fopen("gfact.out", "w");
fprintf(fout, "%d", cautbin(divmax, q));
fclose( fout );
return 0;
}