/****************************************************************************/
/* Lista de primos                                                          */
/*                                                                          */
/* Jaime Suarez <mcripto@bigfoot.com> 2003                                  */
/* en http://elparaiso.mat.uned.es                                            */
/****************************************************************************/

#include <stdio.h>

#include <stdlib.h>

 
typedef unsigned long ulong;

int  es_primo(ulong n);
void uso(void);

main(int argc, char *argv[])
{
 ulong i,inicio,final;
 int cont=0;

 if (argc<3) uso();
 inicio=atol(argv[1]);
 final=atol(argv[2]);
 if (inicio>final) uso();
 printf("Lista de primos del %lu al %lu.\n\n",inicio,final);
 if (inicio<3) { printf("%5d ",2); inicio=3; cont=1;}
 if (inicio%2==0) inicio++;
 for (i=inicio; i<=final; i+=2) {
	if (es_primo(i) ) {
		printf("%5lu ",i);
		if (++cont % 10 ==0) printf("\n");
	}
 }
 return 0;
}

int es_primo(ulong numero)
{
 ulong div;

 for (div=3; (numero%div!=0 && div*div<=numero); div+=2) ;
 if (div*div>numero) return 1;
 else return 0;
}

void uso(void)
{
 fprintf(stderr,"-------------------------------------\n");
 fprintf(stderr," Uso: LISPRI n m\n");
 fprintf(stderr," lista de los primos entre n y m\n");
 fprintf(stderr,"-------------------------------------\n");
 exit(1);
}