100 primeros primos [C++]

Iniciado por pablo256, 26 Julio 2015, 23:33 PM

0 Miembros y 1 Visitante están viendo este tema.

pablo256

Hola!

Pues resulta que haciendo el ejercicio de C (en C++) de la calculadora de primos, el resultado que obtengo es que imprime todos los números desde el 2 (el 1 lo obvio porque no es primo) hasta el 101, a pesar de que la función que determina si el número es primo o no funciona bien (adjunto un programita que imprime si el número es primo o no, está hecho para controlar que funciona).
Si algún alma caritativa me puede dar alguna pista le estaría muy agradecido  ;-)
Aquí el programa entero, y aquí la calculadora de primos.

pablo256

Hola a todos...

Pues le pedí ayuda a un amigo y al final con cambiar un par de cosas (mi calculadora funciona mejor que la suya, a pesar de que él estudia ingeniería y yo filosofía jejeje) ya me funciona, aquí está el programa.

0and6

 :D :D >:( ::)
Hola bueno no se por que me gustan estos minutos blancos
Bueno simplemente queria mencionar que existen un método llamado la criba de erastotenes, con el cual es mas rápido calcular números primos grandes, solamente eso si es que a alguien le sirve

engel lex

tu propuesta es incorrecta... no son 100 primeros numeros primos, son los primos entre el 1 y el 100

el metodo más rapido para primos vendría siendo

Código (cpp) [Seleccionar]
bool primo(int numero){
if(numero<=3)return numero >= 2;
if((numero&1)==0) return false;//si el ultimo bit es 0 es par
if(numero%3==0) return false;
int i;
for(i=5;i*i<=numero;i+=6){
if(numero%i==0) return false;
if(numero+2%i==0) return false;
}
return true;
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

LaiaxanIV

Si no quieres almacenar solo los numeros primos no es necesario crear aux de n+1 posiciones. Lo importante son los dos fors que solos calculan los numeros que NO son primos.


vector <bool> Erastotenes(int n) {
vector <bool> aux(n + 1, true); //vector donde marca si un numero es primo o no
for (int i = 2; i*i <= n; ++i) {
for (int j = 2*i; j < aux.size(); j = j + i) {
aux[j] = false;
}
}
return aux;
}