Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/06/2014, 08:36
Avatar de leosansan
leosansan
 
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años
Puntos: 49
Respuesta: Buscando números primos, con la criba de Eratóstenes

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
  1. #include <stdio.h>
  2. #define N 100 /* hasta aqui calculamos los primos */
  3.  
  4. int main() {
  5.   int i, j, nums[N+1],  x = 1;
  6.   puts("\n\tSon PRIMOS:\n");
  7.   printf( "\t%4d:::%5d\n", x++, 2 );
  8.   for( i = 3; i <= N; i += 2 )
  9.     if( nums[i] != 1 ) {
  10.       printf( "\t%4d:::%5d\n", x++, i );
  11.       for( j = 2; ( i * j ) <= N; j++)
  12.         nums[i * j] = 1;
  13.     }
  14.   printf("\n  Hasta %d hay %d numeros primos\n", N, --x);
  15.   return 0;
  16. }

Sobre le Criba de Eratóstenes se puede mirar estos enlaces:

Criba de Eratóstenes

Criba de Eratóstenes Wikipedia

¡¡¡Saluditos!!!


Última edición por leosansan; 29/06/2014 a las 09:32