Tiene un fallo: declaras los arrays sin antes dimensionarlos.
Por otro lado se puede mejorar su eficiencia yendo del 3 a n de dos en dos, ya que los pares no son primos
Y si sólo se trata de imprimir, nos podríamos ahorrar el array prims.
El no uso de memoria dinámica limita bastante el valor máximo de n (en mi caso a 100000), cuando con malloc se podría llegar a 100000000.
Con el n corregido y sin prims:
Código C++:
Ver original#include <stdio.h>
#define N 100 /* hasta aqui calculamos los primos */
int main() {
int i, j, nums[N+1], x = 1;
puts("\n\tSon PRIMOS:\n"); printf( "\t%4d:::%5d\n", x
++, 2 ); for( i = 3; i <= N; i += 2 )
if( nums[i] != 1 ) {
printf( "\t%4d:::%5d\n", x
++, i
); for( j = 2; ( i * j ) <= N; j++)
nums[i * j] = 1;
}
printf("\n Hasta %d hay %d numeros primos\n", N
, --x
); return 0;
}
Sobre le Criba de Eratóstenes se puede mirar estos enlaces:
Criba de Eratóstenes Criba de Eratóstenes Wikipedia ¡¡¡Saluditos!!!