Números primos entre dos números dados

Vanessa León

/* Este programa calcula los números primos con la criba de Eratóstenes */
#include <stdio.h>
void HallaPrimos(int n[], int maxn);
int  PideLimites(int *p1, int *p2, int maxn);
void ImprimePrimos(int *p1, int *p2);
int  InputInt(int mi, int ma);
#define MAXNUM 10000
#define MAXPOS 70

int primos[MAXNUM];
main()
{
int da,a;
int i,n,r;

printf(“\n Numeros primos mediante criba de Eratostenes:\n\n”);

HallaPrimos(primos,MAXNUM);

while (PideLimites(&da,&a,MAXNUM-1)) {
ImprimePrimos(primos+da,primos+a);
}
}

void HallaPrimos(int n[], int maxn)
{
int i,mu;

for (i = 2; i < maxn; i++) {
n[i] = i;
}

for (i = 2; i < maxn; i++) {
if (n[i]) {
for (mu = i+i; mu < maxn; mu += i) {
n[mu] = 0;
}
}
}

printf(“\n\n”);
}

int PideLimites(int *p1, int *p2, int maxn)
{
int i,mu;

printf(“Muestra los n£meros primos a partir de   : “);
*p1 = InputInt(2,maxn);
printf(“Hasta (igual que el anterior para salir) : “);
*p2 = InputInt(2,maxn);

return (*p2 > *p1);
}

void ImprimePrimos(int *p1, int *p2)
{
int pos = 0;
int *p;

putchar(‘\n’);

for (p = p1; p <= p2; p++) {
if (*p) {
if (pos > MAXPOS) {
putchar(‘\n’);
pos = 0;
} else if (pos > 0) {
printf(“, “);
pos += 2;
}
pos += printf(“%d”,*p);
}
}

printf(“\n\n”);
}
int InputInt(int mi, int ma)
{
int num;
int resulta;
int valido;

do {
resulta = scanf(“%d”,&num);
if (resulta != EOF) {
while (getchar() != ‘\n’)
;
}
valido = (resulta == 1 && num >= mi
&& num <= ma);
if (! valido) {
printf(“Debe introducir un entero”
” comprendido entre %d y %d: \a”,mi,ma);
}
} while (! valido);
return num;
}

Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s