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:
#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!