.........................................................
Pero aún así es más eficiente, entre otras cosas porque no tienes llamadas a función y esas cosas. El algoritmo es el mismo básicamente.
El problema esque yo meto los datos en la pila y tú usas memoria dinámica (malloc).
.............................................................
Pero aún así es más eficiente, entre otras cosas porque no tienes llamadas a función y esas cosas. El algoritmo es el mismo básicamente.
El problema esque yo meto los datos en la pila y tú usas memoria dinámica (malloc).
.............................................................
El mismo código tuyo, con mis modificaciones en cuanto a ir de dos en dos, y manteniendo el uso de la pila así como de las funciones es similar al mío:
Código
#include <stdio.h> #define COMPUESTO 0 const int MAX = 1000000; void tacharMultiplos(char Tabla[],int i) { int j; for (j = i;(i*j) <= MAX;j+=2) { Tabla[j*i] = COMPUESTO; } } void mostrarTabla(char Tabla[]) { int i = 3,cont=1; for (i = 3; i <= MAX;i+=2) { if (Tabla[i] != COMPUESTO) { /*printf("%d ",Tabla[i]);*/ cont++; } } printf("\ncont= %d\n",cont); } int main() { // Generar Criba de erastotenes char Tabla[MAX+1]; // tabla booleana int i = 0; // valor inicial for (i = 3; i<= MAX;i++) { Tabla[i] = i; } for (i = 3;i*i<=MAX;i+=2) { tacharMultiplos(Tabla,i); } mostrarTabla(Tabla); return 0; }
Eso sí, creo que el uso de la pila penaliza el tamaño del array ya que en mi caso puedo llegar a 10^8 y en el tuyo a 10^6, al menos en mi ordenador.
Y como verás he respetado el uso que haces de las llaves ..... que se me antoja excesivo.
¡¡¡¡ Saluditos! ..... !!!!