elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  calcular numeros primos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: calcular numeros primos  (Leído 9,359 veces)
AlkatraaZ

Desconectado Desconectado

Mensajes: 5


Ver Perfil
calcular numeros primos
« en: 3 Julio 2012, 22:25 pm »

Buenas tardes gente, soy bastante nuevo en el mundo de la programacion y estoy haciendo algunos ejercicios de operadores y estructuras de control, uno me pedia que calcule si un numero es primo o no, lo calcule de esta manera:
Código
  1. #include <iostream>
  2. #define pl '\n'
  3. #include <cstdlib>
  4. using namespace std;
  5. /*Leer un numero natural N. Determinar con un mensaje alusivo si es primo.*/
  6. int main(int argc, char *argv[]) {
  7. int n,c,suma,x;
  8. cout<<"Calcular si un numero es primo"<<pl;
  9. cout<<"Ingrese un numero"<<pl;
  10. cin>>n;
  11. while (n<=1){
  12. cout<<"ERROR: El numero ingresado es incorrecto"<<pl;
  13. cout<<"ingrese un numero"<<pl;
  14. cin>>n;
  15. }
  16. c=n-1;
  17. while (c>1){
  18. x=n%c;
  19. suma*=x;
  20. c--;
  21. }
  22. if (suma==0) {
  23. cout<<"El numero "<<n<<" no es primo"<<pl;
  24. }
  25. else {
  26. cout<<"El numero "<<n<<" es primo"<<pl;
  27. }
  28. system("PAUSE");
  29. return 0;
  30. }

Creen que me complique mucho de alguna manera?

Y ahora estoy intentando hacer uno que calcule una cantidad x de numeros primos (osea, si pongo 10, que devuelva 2, 3, 5, 7, 11, 13,  17, 19, 23, 27) pero no lo pude adaptar, como me recomiendan hacerlo?

Desde ya muchas gracias.
Tomas.


En línea

tremolero

Desconectado Desconectado

Mensajes: 270


Ver Perfil
Re: calcular numeros primos
« Respuesta #1 en: 3 Julio 2012, 22:42 pm »

Hola Alkatraaz, te digo lo poco que se me ha ocurrido para adaptarlo y que te calcule la cantidad de numeros.
solicitas la cantidad de primos que debe calcular, lo guardas en una variable.
luego metes todo tu programa en un bucle while en que la condicion es salir=false.
y luego dentro del while, pones una variable que empiece desde uno y se vaya sumando, cada vez que un numero sea pi, coges una variable llamemosla contador y le vas sumando +1, cuando contador sea igual a la cantidad de primos que debes calcular, le dices que salir=true y se acabo.

si no me he rallado, creo que te servira.

Saludos...


En línea

ralymontes

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Re: calcular numeros primos
« Respuesta #2 en: 3 Julio 2012, 22:47 pm »

No entendi muy bn tu codigo, pero para el segundo problema que harás, en realidad, pues me gusa mucho :D, lo hice tambien cuando iniciaba (bueno, uno parecido), y es un ejemplo padre de programacion.... el grano.

Aquella vez lo que tenia que hacer era si me daban 10 (como en tu ejemplo) debia sacar por pantalla los numeros primos que hay hasta el 10, en éste caso sería 2, 3, 5 y 7.

Entocnes lo que hice fue establecer un arreglo (si no mal recuerdo utilice 2 for anidados...) de tamaño N (N=el numero ingresado) y con un indice recorrer cada posicion (logico, cada posicion es un numero de arreglo, solo cuida si inicias desde 0 ó desde 1 XD ) , y dividirlo entre TODOS los numeros que hay desde 1 hasta N, y contar las veces que i%N==0 (siendo N la posicion del arreglo), al final, el numero de veces que se cumple aesa condicion debe ser igual a 2 ... ;)

Ojalá me hayas entendido.

Saludos, Raly.
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: calcular numeros primos
« Respuesta #3 en: 3 Julio 2012, 23:18 pm »

Yo lo que haría sería una función que calcule si cierto número es primo o no (en vez de ponerlo en main(), para que lo que viene después sea más fácil).

Entonces, con un bucle for, iría incrementando una variable en uno, y calculando si el valor de dicha variable es un número primo mediante la función anterior. En caso de serlo, aumentas una variable llamada contador y guardas el número primo en un vector. Cuando el contador llegue a 10, tendrás los 10 primeros números primos.

Saludos.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.148


I'Love...!¡.


Ver Perfil WWW
Re: calcular numeros primos
« Respuesta #4 en: 4 Julio 2012, 00:33 am »

Usa la Criba de Eratóstenes para calcularlos, en el foro ya se han hecho varios códigos (ni me los pidas).

 * Inclusive en wikipedia esta el código en varios lenguajes...

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
AlkatraaZ

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: calcular numeros primos
« Respuesta #5 en: 4 Julio 2012, 00:46 am »

Yo lo que haría sería una función que calcule si cierto número es primo o no (en vez de ponerlo en main(), para que lo que viene después sea más fácil).

Entonces, con un bucle for, iría incrementando una variable en uno, y calculando si el valor de dicha variable es un número primo mediante la función anterior. En caso de serlo, aumentas una variable llamada contador y guardas el número primo en un vector. Cuando el contador llegue a 10, tendrás los 10 primeros números primos.

Saludos.
todavia no llegue a la parte de funciones, voy leyendo cada unidad y haciendo los ejercicios propuestos, pero me gusta tu idea :P

No entendi muy bn tu codigo, pero para el segundo problema que harás, en realidad, pues me gusa mucho :D, lo hice tambien cuando iniciaba (bueno, uno parecido), y es un ejemplo padre de programacion.... el grano.

Aquella vez lo que tenia que hacer era si me daban 10 (como en tu ejemplo) debia sacar por pantalla los numeros primos que hay hasta el 10, en éste caso sería 2, 3, 5 y 7.

Entocnes lo que hice fue establecer un arreglo (si no mal recuerdo utilice 2 for anidados...) de tamaño N (N=el numero ingresado) y con un indice recorrer cada posicion (logico, cada posicion es un numero de arreglo, solo cuida si inicias desde 0 ó desde 1 XD ) , y dividirlo entre TODOS los numeros que hay desde 1 hasta N, y contar las veces que i%N==0 (siendo N la posicion del arreglo), al final, el numero de veces que se cumple aesa condicion debe ser igual a 2 ... ;)

Ojalá me hayas entendido.

Saludos, Raly.
te referis a algo asi no (no es de mi autoria, lo busque por internet)
Código
  1. int main()
  2. {
  3. int n=0,c=0,c2=0,res=0,nc=0;
  4. cout<<"Introduce el limite de numeros: "; cin>>n;
  5. for(c=1;c<=n;c++)
  6. {
  7. for(c2=1;c2<=c;c2++)
  8. {
  9. res=c%c2;
  10. if(res==0)
  11. {
  12. nc++;
  13. }
  14. }
  15. if(nc==2)
  16. {
  17. cout<<c<<" ";
  18. }
  19. nc=0;
  20. }
  21. cout<<pl;
  22. system("PAUSE");
  23. }

Usa la Criba de Eratóstenes para calcularlos, en el foro ya se han hecho varios códigos (ni me los pidas).

 * Inclusive en wikipedia esta el código en varios lenguajes...

Dulces Lunas!¡.

la criba de eratostenes es el codigo que le acabo de pasar a Raly (a grandes rasgos claro) que como el bien dice si yo pongo 10, en vez de darme los 10 primeros numeros primos te da todos los primos menores que 10 (wiki says: La criba de Eratóstenes es un algoritmo que permite hallar todos los números primos menores que un número natural dado N)
En línea

ralymontes

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Re: calcular numeros primos
« Respuesta #6 en: 4 Julio 2012, 04:54 am »

Citar
te referis a algo asi no (no es de mi autoria, lo busque por internet)
Código

int main()
{
   int n=0,c=0,c2=0,res=0,nc=0;
   cout<<"Introduce el limite de numeros: "; cin>>n;
   for(c=1;c<=n;c++)
   {
      for(c2=1;c2<=c;c2++)
      {
         res=c%c2;
         if(res==0)
         {
            nc++;
         }
      }
      if(nc==2)
      {
         cout<<c<<" ";
      }
      nc=0;
   }
   cout<<pl;
   system("PAUSE");
}

Exacto, a eso m referia, creo que no es muy óptmo por el gran numero de comparaciones, pero funciona :D
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: calcular numeros primos
« Respuesta #7 en: 4 Julio 2012, 09:19 am »

¡Buenas!

Tienes un  gran error en tu primer codigo. Estas multiplicando la variable suma por algo sin haberla inicializado, por lo que en principio puede tener cualquier valor, incluido el cero (es mas, en C++ creo que se inicializa a cero por defecto). Por lo que cualquier resultado de multiplicar suma por otro valor podria ser siempre cero, lo que te daria un falso negativo en la busqueda de primos. Tienes que inicializar suma a uno.

Intenta inicializar las variables o hacerles una asignacion antes de utilizarlas con un valor que tenga sentido con el uso que les vayas a dar.

¡Saludos!
En línea

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

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: calcular numeros primos
« Respuesta #8 en: 4 Julio 2012, 17:20 pm »

¡Buenas!

Tienes un  gran error en tu primer codigo. Estas multiplicando la variable suma por algo sin haberla inicializado, por lo que en principio puede tener cualquier valor, incluido el cero (es mas, en C++ creo que se inicializa a cero por defecto). Por lo que cualquier resultado de multiplicar suma por otro valor podria ser siempre cero, lo que te daria un falso negativo en la busqueda de primos. Tienes que inicializar suma a uno.

Intenta inicializar las variables o hacerles una asignacion antes de utilizarlas con un valor que tenga sentido con el uso que les vayas a dar.

¡Saludos!

Muy por el contrario amigo, creo que nunca se inicializan en 0, por eso es que los inicializo cuando necesito que sean 0 o algun valor especifico...
por darte un ejemplo:
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(int argc, char *argv[]) {
  5. int asd;
  6. cout<<asd;
  7. return 0;
  8. }
  9.  

este codigo devuelve como valor de asd el numero 2130567168

Pero por las dudas voy a tomar en cuenta tu consejo, no cuesta nada y nunca esta de mas ^^
Ahora me voy a seguir luchando con el de calcular los N primeros primos :P
En línea

SXF

Desconectado Desconectado

Mensajes: 189



Ver Perfil WWW
Re: calcular numeros primos
« Respuesta #9 en: 4 Julio 2012, 17:35 pm »

Como que nunca se inicializan nunca a cero, bueno en algunos lenguajes si como java me parece u otros aunque es mejor prevenir que curar y asegurarte.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python 2.6] Funcion generadora de Numeros primos (5.761.455 primos en 19 seg)
Scripting
katas 2 8,203 Último mensaje 10 Marzo 2010, 01:50 am
por Novlucker
Help! Calcular máximo de 3 numeros usando función
Programación C/C++
sora_ori 5 2,641 Último mensaje 18 Febrero 2013, 23:34 pm
por BatchianoISpyxolo
Función para calcular los números de Fibonacci
Programación C/C++
Caster 4 1,945 Último mensaje 18 Mayo 2013, 14:00 pm
por Caster
[JS] ¿Programa para calcular números primos?
Scripting
Linton 5 16,959 Último mensaje 23 Julio 2013, 07:40 am
por Linton
codigo para calcular los numeros primos « 1 2 3 4 »
Programación C/C++
minari02 32 16,879 Último mensaje 28 Diciembre 2013, 16:35 pm
por leosansan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines