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)
| | |-+  codigo para calcular los numeros primos
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 2 3 [4] Ir Abajo Respuesta Imprimir
Autor Tema: codigo para calcular los numeros primos  (Leído 21,888 veces)
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: codigo para calcular los numeros primos
« Respuesta #30 en: 28 Diciembre 2013, 14:55 pm »

.........................................................
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
  1. #include <stdio.h>
  2. #define COMPUESTO 0
  3.  
  4. const int MAX = 1000000;
  5.  
  6. void tacharMultiplos(char Tabla[],int i)
  7. {
  8.    int j;
  9.    for (j = i;(i*j) <= MAX;j+=2)
  10.    {
  11.        Tabla[j*i] = COMPUESTO;
  12.    }
  13. }
  14.  
  15. void mostrarTabla(char Tabla[])
  16. {
  17.    int i = 3,cont=1;
  18.  
  19.    for (i = 3; i <= MAX;i+=2)
  20.    {
  21.        if (Tabla[i] != COMPUESTO)
  22.        {
  23.            /*printf("%d  ",Tabla[i]);*/
  24.            cont++;
  25.        }
  26.  
  27.    }
  28.  
  29.    printf("\ncont= %d\n",cont);
  30. }
  31.  
  32. int main()
  33. {
  34.    // Generar Criba de erastotenes
  35.  
  36.    char Tabla[MAX+1]; // tabla booleana
  37.    int i = 0;
  38.  
  39.    // valor inicial
  40.  
  41.    for (i = 3; i<= MAX;i++)
  42.    {
  43.        Tabla[i] = i;
  44.    }
  45.  
  46.  
  47.    for (i = 3;i*i<=MAX;i+=2)
  48.    {
  49.            tacharMultiplos(Tabla,i);
  50.    }
  51.  
  52.    mostrarTabla(Tabla);
  53.    return 0;
  54. }
  55.  

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! ..... !!!!

:rolleyes: ;) ;) ;) :rolleyes:


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: codigo para calcular los numeros primos
« Respuesta #31 en: 28 Diciembre 2013, 16:06 pm »

El problema no es imprimir 10^18, que si lo acepta, sino que a partir de 10^9 malloc no lo acepta
Malloc recibe un argumento de tipo size_t, el valor máximo que puede alcanzar está definido con la macro SIZE_MAX (definida en stdint.h). Normalmente suele tener el valor de un unsigned long long (2^64-1).

El problema no está en malloc. El problema son estos dos:

- Estás pidiendo memoria de forma contigua es muy posible que tengas 1 gb libre de memoria ram, el problema esque la memoria libre estará "dispersa". Es muy díficil que te encuentres 1 gb de espacio libre contiguo. Se podría suplir esto usando listas o varios vectores.
- En una aplicación de 32 bits, la máxima memoria permitida es de 2GB (si la compilas en 64 bits llegarías a los 16 tb)

..
Y como verás he respetado el uso que haces de las llaves ..... que se me antoja excesivo.  ;) ;) ;)[/size]
Pues efectivamente, era por saltase iteraciones... Y porque el if que he puesto sobraba  :silbar:

Y no soy tan nazi con las llaves xD. Ahí son pocas sentencias y se ve bastante claro. Yo lo hubiera identado de otra forma:
Código
  1. #include <stdio.h>
  2. #define COMPUESTO 0
  3.  
  4. const int MAX = 1000000;
  5.  
  6. void tacharMultiplos(char Tabla[],int i)
  7. {
  8.    int j;
  9.  
  10.    for (j = i; (i*j) <= MAX; j+=2)
  11.        Tabla[j*i] = COMPUESTO;
  12. }
  13.  
  14. void mostrarTabla(char Tabla[])
  15. {
  16.    int i = 3,cont=1;
  17.  
  18.    for (i = 3; i <= MAX; i+=2)
  19.        if (Tabla[i] != COMPUESTO) cont++;
  20.  
  21.    printf("\ncont= %d\n",cont);
  22. }
  23.  
  24. int main()
  25. {
  26.    // Generar Criba de erastotenes
  27.  
  28.    char Tabla[MAX+1]; // tabla booleana
  29.    int i = 0;
  30.  
  31.    // valor inicial
  32.  
  33.    for (i = 3; i<= MAX; i++)   Tabla[i] = i;
  34.    for (i = 3; i*i<=MAX; i+=2)   tacharMultiplos(Tabla,i);
  35.  
  36.    mostrarTabla(Tabla);
  37.    return 0;
  38. }
  39.  


« Última modificación: 28 Diciembre 2013, 16:08 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: codigo para calcular los numeros primos
« Respuesta #32 en: 28 Diciembre 2013, 16:35 pm »

.....................................................

El problema no está en malloc. El problema son estos dos:

- Estás pidiendo memoria de forma contigua es muy posible que tengas 1 gb libre de memoria ram, el problema es que la memoria libre estará "dispersa". Es muy díficil que te encuentres 1 gb de espacio libre contiguo. Se podría suplir esto usando listas o varios vectores.
- En una aplicación de 32 bits, la máxima memoria permitida es de 2GB (si la compilas en 64 bits llegarías a los 16 tb)
......................................

 ;-) ;-) ;-) Seré pardillo ........ mi memoria es la que si falla.

¡¡¡¡ Saluditos! ..... !!!!

:rolleyes: ;) ;) ;) :rolleyes:
En línea

Páginas: 1 2 3 [4] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python 2.6] Funcion generadora de Numeros primos (5.761.455 primos en 19 seg)
Scripting
katas 2 9,530 Último mensaje 10 Marzo 2010, 01:50 am
por Novlucker
Patrón para los números primos
Desafíos - Wargames
Jesusdpm 2 5,746 Último mensaje 30 Septiembre 2010, 21:50 pm
por MdosMil
calcular numeros primos « 1 2 »
Programación C/C++
AlkatraaZ 12 11,623 Último mensaje 4 Julio 2012, 20:19 pm
por AlkatraaZ
[JS] ¿Programa para calcular números primos?
Scripting
Linton 5 18,846 Último mensaje 23 Julio 2013, 07:40 am
por Linton
Ayuda con código para calcular los días de un mes
Programación C/C++
D_F4UL7 1 2,069 Último mensaje 25 Octubre 2016, 15:22 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines