elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Criba de Eratostenes[C]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Criba de Eratostenes[C]  (Leído 9,272 veces)
HRSLASH

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Criba de Eratostenes[C]
« en: 29 Diciembre 2010, 19:27 pm »

Hola gente! Dejo un algoritmo q devuelve numeros primos entre 1 y 1000..
Saludos!!

Código
  1. #include<stdio.h>
  2. #define SIZE 1000
  3.  
  4. void cribaDeEratostenes(int [], int , int);
  5.  
  6. main()
  7. {
  8.      int vectorPrimo[SIZE];
  9.      int i, num;
  10.  
  11.      for (i = 1; i <= SIZE; i++)
  12.          vectorPrimo[i] = 1;
  13.  
  14.      for (i = 2; i <= SIZE; i++)
  15.          if (vectorPrimo[i] == 1){
  16.             cribaDeEratostenes(vectorPrimo, i, SIZE);
  17.             printf("%-5d", i);
  18.          }
  19.  
  20.  
  21.      return 0;
  22. }
  23.  
  24.  
  25.  
  26.  
  27.  
  28. void cribaDeEratostenes(int v[], int n, int size)
  29. {
  30.     int i = n;
  31.  
  32.     for (i += n; i <= size; i += n)
  33.         v[i] = 0;
  34. }
  35.  


En línea

La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer
N0body

Desconectado Desconectado

Mensajes: 95


Ver Perfil
Re: Criba de Eratostenes[C]
« Respuesta #1 en: 30 Diciembre 2010, 02:46 am »

:O esto merece un comentario, creo q en uno de los primeros post q hice en el foro se trataba sobre la Criba de Eratostenes...

Algunas acotaciones bobas:

-en tu caso hiciste una correspondencia entre la posicion en el vector y el numero que representa dicho "hueco" de la criba... haciendo esto desperdicias 2 numeros... ya que el 1 y el 0 no los necesitas en el análisis y sí son posibles "i" (posiciones). Esto podria solucionarse haciendo que la posicion "i" (o el hueco "i" del vector q representa la criba como me gusta llamarlo) represente al número i+2... de ese modo no desperdiciar 2 numeros... En cualquier caso, en el primer bucle (el que llena todo con "1") llenas la posicion 1 que no necesitas porque no usas.

-Yo no usaria una funcion, es algo inecesario, la incluyes en un bucle, la llamas muchisimas veces (depende de la longitud de la criba), es preferible escribir todo en el bucle mismo y evitarse todo los pasos q consisten en el paso de argumentos... hasta le haces un favor seguramente (y mientras este prolijo) a cualquiera q lo lea (y a ti mismo, escribes menos). Además (y si todavía te ostinas con utilizar funciones) lo que está definido en el define (si mal no recuerdo) vale para todo el código, es un desperdicio que pases como argumento dicha constante...

-El vector representa un "estado" de los numeros que se identifican con su posicion. Traducido: el número 13 se ve representado por el entero vectorPrimo[13]... lo que esta adentro de esa variable, osea, el valor de vectorPrimo[13] indica meramente un estado logico del numero, osea indica si es primo o no... por lo tanto y para ahorrar memoria yo usaria un vector char en vez de un int (dado que estas almacenando solo 1 y 0).

-En el programa cuando encuentras un primo "x" tachas todos los multiplos de "x"... Pero te olvidas que ya habias encontrado primos menores que "x" y que tachaste los multiplos de estos... muchos de estos seran tambien multiplos de "x" que volveras a revisar... mejor yo diria que en el bucle de la funcion empieces a tachar los multiplos de x a partir de x*x en vez de 2*x...

Espero que se me entienda, sé que no tengo la mejor ortografía y que a veces mis oraciones se extienden demasiado...

Próspero año nuevo!


« Última modificación: 31 Diciembre 2010, 01:22 am por N0body » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C#] Criba de Eratóstenes
.NET (C#, VB.NET, ASP)
Hendrix 1 10,107 Último mensaje 30 Septiembre 2007, 12:49 pm
por Meta
Criba de eratóstenes en C.
Programación C/C++
estudiante_1 8 8,798 Último mensaje 19 Agosto 2015, 22:59 pm
por furciorifa
Criba de Eratostenes en C con funciones.
Programación C/C++
estudiante_1 6 3,908 Último mensaje 20 Agosto 2015, 03:16 am
por furciorifa
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines