Código de C/Visual C - Cálculo de los número primos en C++

Cálculo de los número primos en C++gráfica de visualizaciones


C/Visual C

estrellaestrellaestrellaestrellaestrella(2)
Publicado el 23 de Julio del 2002 por Ismael Cortés V.
19.550 visualizaciones desde el 23 de Julio del 2002. Una media de 28 por semana
Programa que muestra tantos numeros primos como se le indique al momento de compilacion. Debido a que copia los numeros primos obtenidos en memoria, se puede cambiar facilmente para que se use como una funcion en lugar de ser parte del codigo. No hay mucho que decir, el programa es bastante rapido al correr (hablando relativa mente) pues debido a el metodo de division (usando los numeros primos obtenidos), la mitad de los numeros naturales son descartados rapidamente en la primera pasada. El codigo se podria oprimizar un poco cambiando la sentencia:
"numero++;" (sin comillas) por la sentencia "numero+=2;", pero es poco lo que se puede hacer.

Versión 1
estrellaestrellaestrellaestrellaestrella(2)

Publicado el 23 de Julio del 2002gráfica de visualizaciones de la versión: Versión 1
19.551 visualizaciones desde el 23 de Julio del 2002. Una media de 28 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//Este programa calcula 66559 numeros primos (el maximo esta limitado por la memoria)
 
//Version: 2.1
 
 
//  Velocidad del Programa
// -----------------------------------------------------------------
// Al ser compilado con Borland C++ 5.5.1 con '-v' como opcion,
//y ser corrido en un AMD Duron a 841Mhz aprox. con Windows ME,
//calcula 10240 numeros en 3 segundos
////////////////////////////////////////////////////////////////////////
 
////////////////////////////////////////////////////////////
//Este programa es de codigo libre y puede ser usado por
//cualquier persona sin necesidad de permiso de ninguna clase,
//PERO señalando cualquier cambio que se haya hecho en el
//CodigoFuente
//////////////////////////////////////////////////////
//   (Copyleft) 2002- Ismael Cortes V. GDL, Mexico  //
//////////////////////////////////////////////////////
 
#include <stdio.h>
 
#define MAX_PRIMOS 66559
 
 
void main(void) {
   unsigned long numero=3;
   unsigned long primos[MAX_PRIMOS];
   unsigned long primos_num=1;
 
 
   //Primer numero primo: 2
   primos[0]=2;
 
   while (primos_num < MAX_PRIMOS)
   {
 
         unsigned long i;        //Indice para la coleccion de numeros primos
 
         for (i=0;i<primos_num;i++) //"Loop" hasta usar la coleccion completa
         {
            if ( !(numero%primos[i]) ) //Si se hizo una division entera
               break;                 //salimos del "loop"
         }
 
         if (i == primos_num) //si no se pudo dividir el numero
         {
            primos[primos_num]=numero; //Entonces guardamos el numero en el indice actual
            primos_num++; //incremento del numero de numeros primos
         }
 
         numero++; //Incrementamos el numero
 
   }
   //FIN DEL "LOOP"
 
   //Imprimimos todos los resultados
   for (unsigned long j=0;j<MAX_PRIMOS&&primos[j]!=0;j++)
      printf("%lu ", primos[j]);
}



Comentarios sobre la versión: Versión 1 (2)

Juan Medina Flores
02 de Agosto del 2002
estrellaestrellaestrellaestrellaestrella
Excelente código, es bastante seguro y confiable. Sigueindo las reglas del software libre, me tomé la libertad de modificarlo y me quedó lo siguiente. Lo malo es que no poseo un compilador de C++ para probarlo. Estoy aprendiendo C y me gustaría una respuesta o comentario acerca de esto. Saludos:

#include <stdio.h>

#define MAX_PRIMOS 66559

void main(void) {
unsigned long numero = 3;
unsigned long primos[MAX_PRIMOS];
unsigned long primos_num = 1;

//Primer numero primo: 2
primos[0] = 2;

while (primos_num < MAX_PRIMOS) {

unsigned long i = 0; //Indice para la coleccion de numeros primos

while (i < primos_num && (numero%primos[i])) { //"Loop" hasta usar la coleccion completa
i++;
}

if (i == primos_num) { //si no se pudo dividir el numero
printf("%lu ", numero); // Se imprime el resultado
primos[primos_num] = numero; //Entonces guardamos el numero en el indice actual
primos_num++; //incremento del numero de numeros primos
}

numero++; //Incrementamos el numero
}
//FIN DEL "LOOP"

}
Responder
YOPI
13 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
no funciona en code blocks :(
Responder

Comentar la versión: Versión 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s264