Pagini recente » Cod sursa (job #1933448) | Cod sursa (job #1704062) | Cod sursa (job #1016356) | Cod sursa (job #1982620) | Cod sursa (job #2074152)
#include <stdio.h>
#define L 30
int div[300], exp[300];
int nrdiv, q;
int divd(int n, int d) {
int nr = 0;
while (n >= d)
nr += n /= d;
return nr;
}
int okek(int n) {
int i = 0;
while (i < nrdiv && divd(n, div[i]) >= exp[i] * q)
i++;
return i >= nrdiv;
}
int main()
{
FILE *fin, *fout;
int p, d, e, i, pas, r;
fin = fopen("gfact.in", "r");
fscanf(fin, "%d%d", &p, &q);
fclose(fin);
d = 2;
nrdiv = 0;
while (d * d <= p) {
if (p % d == 0) {
e = 0;
while (p % d == 0) {
e++;
p /= d;
}
div[nrdiv] = d;
exp[nrdiv] = e;
nrdiv++;
}
d++;
}
if (p > 1) {
div[nrdiv] = p;
exp[nrdiv] = 1;
nrdiv++;
}
pas = 1 << L;
r = 0;
while (pas != 0) {
if (!okek(r + pas)) {
r += pas;
}
pas >>= 1;
}
fout = fopen("gfact.out", "w");
fprintf(fout, "%d", r + 1);
fclose(fout);
return 0;
}