Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: pablo256 en 26 Julio 2015, 23:33 pm



Título: 100 primeros primos [C++]
Publicado por: pablo256 en 26 Julio 2015, 23:33 pm
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í (http://pastebin.com/wf0WC2YC) el programa entero, y aquí (http://pastebin.com/kf5rfhZj) la calculadora de primos.


Título: Re: 100 primeros primos [C++]
Publicado por: pablo256 en 27 Julio 2015, 00:14 am
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 (http://pastebin.com/YLn13g8t).


Título: Re: 100 primeros primos [C++]
Publicado por: 0and6 en 2 Abril 2016, 01:00 am
 :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


Título: Re: 100 primeros primos [C++]
Publicado por: engel lex en 2 Abril 2016, 03:49 am
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
  1. bool primo(int numero){
  2. if(numero<=3)return numero >= 2;
  3. if((numero&1)==0) return false;//si el ultimo bit es 0 es par
  4. if(numero%3==0) return false;
  5. int i;
  6. for(i=5;i*i<=numero;i+=6){
  7. if(numero%i==0) return false;
  8. if(numero+2%i==0) return false;
  9. }
  10. return true;
  11. }


Título: Re: 100 primeros primos [C++]
Publicado por: LaiaxanIV en 2 Abril 2016, 10:37 am
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.

Código:
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;
}