primos

By eligioc

void primos(long p[], long t) {

long n = 3, d; /* natural, divisor */

double r; /* raiz de n */

long efp[10] = {2,3,5,7,11,13,17,19,23,29}; // primos

unsigned long np = 10, pp; /* # actual de primos, posicion primo */

int s; /* si primo (1 = si, 0 = no) */

for (pp = 0; pp < np; pp++) p[pp] = efp[pp];

do {

s = 1;

pp = 0;

r = sqrt(n);

do {

d = p[pp++];

if (!(n%d)) s = 0;

} while (s && d < r);

if (s && n > 30) p[np++] = n;

n += 1;

} while (np < t);

}

int primo(long p[], long t, long n) {

/* determina si n es primo */

int s = 1, i = 0; /* si primo */

double r; // raiz de n

long pp = 0, d; /* posicion en p[] */

r = sqrt(n);

do {

d = p[pp++];

if (!(n%d)) s = 0;

} while (s && d < r);

if (n == 1) s = 0;

if (n == 2) s = 1;

return s;

}

int main() {

long lim = 100000, pri[lim], a, b;

int n, k;

primos(pri, lim);

scanf(“%d”, &n);

for (k = 0; k < n; k++) {

scanf(“%ld %ld”, &a, &b);

for ( ; a <= b; a++) if (primo(pri, lim, a)) printf(“%ld\n”, a);

printf(“\n”);

}

printf(“\n\n”);

/* system(“pause”); */

return 0;

}

Escribe un comentario