/* Programa para calcular los numeros primos menores que un numero dado */
/* Por Santiago Bruno                                                   */
/* E-mail: bananabruno@hotmail.com                                      */
/* Bajado de: http://www.santiagobruno.com.ar/programas.html            */

#include <math.h>
#include <stdio.h>
#include <errno.h>

int esprimo(int[],int);
void wrtar(int[],int);

int main(void)
{
int b,tot, a,e;

/* Nota: en este arreglo se almacenan los numeros primos ya calculados,
 si el numero limite para calcular los primos menores es demasiado grande,
 seria conveniente agrandar el arreglo. Si se dispone de muy poca memoria,
 convendria reducirlo. */
 int primos[99999];
 tot = 0;
 e = 2;
 b = 2;
 printf("\nCalcular primos menores que: ");

  scanf("%i",&a);
  while (a <3) {
 printf("\nEste numero debe ser mayor o igual a tres, reingreselo: ");
        scanf("%i",&a);
  }

printf("\n");

  while (b < a) {

if (esprimo(primos,b)==1) {primos[tot] = b; tot= tot + 1;}
b = b+1;
e=2;}
  wrtar(primos,tot);
printf("\nTotal de numeros primos: %i\n",tot);
printf("\nProgramado en C Por Santiago Bruno 24 de abril 2001 - Cordoba - Argentina");
printf("\ne-mail: bananabruno@hotmail.com");
printf("\nBajado de: http://www.santiagobruno.com.ar/programas.html\n");
return(0);
}

int esprimo(int primos[],int a)

{
int i,e,p;
 e = 2;
 p = 1;
 i = 0;
while (primos[i] <= sqrt(a) && primos[i] != 0) {
  if ((a%primos[i])==0) {p=0;}
  i = i +1;
 }
 return(p);
}

void wrtar(int aa[],int N) {
  int i;
      i = 0;
    while (i < N) {
      	printf("%i\t",aa[i]);
	i = i+1;
    }
}
