calcular numeros primos

Iniciado por AlkatraaZ, 3 Julio 2012, 22:25 PM

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

AlkatraaZ

do-while, aunque no lo creas me diste la solucion al de los primeros N primos jajaj
ayer a la noche estaba teniendo un problema, si yo queria encontrar los 10 primeros primos, me daba solamente 2, 3 y el programa quedaba ejecutando, como en un bucle... este era el codigo:
Código (cpp) [Seleccionar]
#include <iostream>
#define pl '\n'
#include <cstdlib>
#include <cstdio>
using namespace std;
/*Determine los 1000 primeros primos.*/
int main(int argc, char *argv[]) {
int n=2,c=n-1,suma,p,contp=0;
cout<<"Ingrese la cantidad de numeros primos que desea obtener"<<pl;
cin>>p; //p=cantidad de primos que quiero obtener
while (contp<p)//mientras los primos que obtube<los que quiero...
{
while (c>1)
{
suma*=n%c;
c-=1;
}
if (suma!=0)
{
cout<<"El numero "<<n<<" es primo"<<pl;
contp++;//cuenta que obtubo un primo
}
suma=1; //<- me faltaba esto!
n++;//
c=n-1;
}
system("PAUSE");
return 0;
}


yo pensaba que cuando el numero no era primo (como seria el caso del 4, que no me aparecia) y pasaba por el lado falso del if no hacia n++, estuve largo rato rompiendome la cabeza hasta que me di cuenta que me faltaba volver a darle un valor distinto de 0 a suma, sino una vez que un numero no fuera primo, en adelante suma iba a ser siempre 0, que error tonto...

do-while

XD

Pues tenia entendido que c++ inicializaba a cero, pero no debe ser asi entonces. Por lo tanto debe se como en C, que las variables tienen "basura", y en particular, auque sea poco problable, es posible que ese valor inicial sea cero. Por eso intenta inicializar las variables con valores que tengan sentido para el uso que les vayas a dar (o como en este caso, una vez que terminas de usarlas, dejarlas como al principio para la siguiente vez que las utilices).

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

AlkatraaZ

igualmente ahora solo calcula hasta el primo 61... creo que es el 16º, despues no arroja ningun valor y queda ejecutando indefinidamente... ya me voy a poner a hacerle una prueba de escritorio a ver que esta fallando...