Bienvenido(a), Visitante. Favor de ingresar o registrarse.

Ingresar con nombre de usuario, contraseña y duración de la sesión

Foros del Club

Páginas: [1]   Ir Abajo
  Enviar tema  |  Imprimir  
Autor Tema: Lista de primos  (Leído 444 veces)
0 Usuarios y 2 Visitantes están viendo este tema.
Tavo
Technocrat
*********

Prestigio: 0
Desconectado Desconectado

Sexo: Masculino
Título universitario: Ninguno
Profesión: GameDeveloper(GD) y Desarrollador
Mensajes: 144




Lenguajes:
Visual Basic
Real Basic
Python
C/C++
Java
SQL
Bases de datos:
SQLite
MySQL
« en: 12/05/2007, 12:39:10 »

Bueno, despues de leer y analizar me dispongo a poner uno de los algoritmos con mayor eficiencia para crear una tabla de primos. La tabla se crea enseguida; lo que acabo de detectar es que si se ponen numeros muy altos la tabla va a hacer overflow y se va a caer todo (Claro, si trabajo con enteros de 32-bits, si quieren una tabla mas grande tienen que cambiarlo por enteros de 64-bits o un tipo abstracto creado por ustedes).
En fín, el código está escrito en C++, cualquier duda digan:

Código:
#include <iostream>
#include <cmath>

using namespace std;

const bool* primeList(int n)
{
   //Devuelve un array de buleanos que dice si el numero es primo o no accediendo a su index.
   //Para acceder al index se debe usar aritmetica es decir *(array+index)
   bool* ret_primeList = new bool[n+1];
   //Llena el array de trues.
   
   for(int i = 0; i<n+1; i++)
      {
      *(ret_primeList+i) = true;
      }
   //CASOS ESPECIALES, 0 Y 1:
   *(ret_primeList+0) = *(ret_primeList+1) = false;
   int m = (int) sqrt(n);
   
   for(int i = 2; i<=m; i++)
      {
      if(*(ret_primeList+i)==true)
         {
            for(int k = i*i; k<=n; k+=i)
               {
               *(ret_primeList+k) = false;
               }
         }
      }
   
   return ret_primeList;
}

int main()
{
   int n;
   
   cout << "Digame le maximo numero que desea para la tabla de numeros primos" << endl;
   cin >> n;
   
   const bool* primes = primeList(n);
   
   for(int i = 0; i<=n; i++)
      {
      //Es feo esto, pero bueno...
      cout << "El " << i << (*(primes+i)==true ? " es " : " no es ") << "primo\n";
      }
   
   system("PAUSE");
   return 0;
}

Saludos!
En línea

CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #1 en: 12/05/2007, 19:54:31 »

Buen aporte, siga asi.

Saludos.
En línea

Foros del Club
   

 En línea
Páginas: [1]   Ir Arriba
  Enviar tema  |  Imprimir  
 
Ir a: