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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


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

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Calculo de números primos
« Respuesta #20 en: 12 Noviembre 2011, 23:59 pm »

No se puede utilizar dentro del if el break; y ya ? xD
Terminara el for y continuara  :silbar:


En línea

CobraCY

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Calculo de números primos
« Respuesta #21 en: 13 Noviembre 2011, 00:22 am »

si, pero el está pidieron que utilicemos un flag. Así que hay que cumplir con sus exigencias xD.

Saludos.


En línea

jamatbar

Desconectado Desconectado

Mensajes: 100


Ver Perfil
Re: Calculo de números primos
« Respuesta #22 en: 13 Noviembre 2011, 22:47 pm »

Gracias a todos por vuestras ayudas, y hombre, no son exigencias, es que básicamente me lo piden con eso XD
En línea

jamatbar

Desconectado Desconectado

Mensajes: 100


Ver Perfil
Re: Calculo de números primos
« Respuesta #23 en: 13 Noviembre 2011, 23:14 pm »

Mi código ha quedado así:

Código
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int valor;
  5. int i;
  6. int flag = 1;
  7.  
  8. printf("Introduzca un valor: ");
  9. scanf(" %d", &valor);
  10.  
  11. for ( i = 2; i < valor && flag!=0; i++ )
  12. if (0 == (valor % i))
  13. {flag = 0;
  14. }
  15. if (flag == 1)
  16. printf(" %d es primo\n", valor);
  17. else
  18. printf(" %d no es primo\n",valor);
  19. return 0;
  20. }
  21.  

Pero ahora me piden que una vez comprobado que el dos no es divisor, probar sólo con los números impares.


EDITO poniendo lo que he intentado:

Código
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int valor;
  5. int i;
  6. int flag = 1;
  7.  
  8. printf("Introduzca un valor: ");
  9. scanf(" %d", &valor);
  10.  
  11. for ( i = 2; i < valor && flag!=0; i+=2 )
  12. if (0 == (valor % i))
  13. {flag = 0;
  14. }
  15. if (flag == 1)
  16. printf(" %d es primo\n", valor);
  17. else
  18. printf(" %d no es primo\n",valor);
  19. return 0;
  20. }
  21.  

¿Con eso bastaría no?


Saludos
« Última modificación: 13 Noviembre 2011, 23:50 pm por jamatbar » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Calculo de números primos
« Respuesta #24 en: 14 Noviembre 2011, 02:17 am »

No porque si revisas el bucle te daras cuenta que solo estas dividiendo entre los numeros pares mientras que el enunciado te pide revisar la serie 2, 3, 5, 7, ... N.

Un problema con el (debido a esa serie) es que debes manejar el caso especial donde el numero es par, si es dos es primo, cualquier otro no lo es.

Con los cambios:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.    int numero;
  7.    int i;
  8.    int es_primo;
  9.  
  10.    printf("Introduce el numero: ");
  11.    fflush(stdout);
  12.    if (scanf("%d", &numero) != 1 || numero < 2)
  13.        return EXIT_FAILURE;
  14.  
  15.    es_primo = numero == 2 || numero % 2 == 1;
  16.    for (i = 3; i < numero && es_primo; i += 2)
  17.        if (numero % i == 0)
  18.            es_primo = 0;
  19.  
  20.    if (es_primo)
  21.        printf("%d es primo\n", numero);
  22.    else
  23.        printf("%d no es primo\n", numero);
  24.  
  25.   return EXIT_SUCCESS;
  26. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
xBurninGx

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Calculo de números primos
« Respuesta #25 en: 14 Noviembre 2011, 03:09 am »

Hola,

si nos ponemos a hacer código, cuando mejor sea mejor, no?

para saber si es un número es primo, no hay que llegar a dividirle entre todos los numeros anteriores a ese número para saberlo, por una demostración algebraica, que no me voy a para a explicar, con probar hasta la raíz cuadrada de ese mismo número es suficiente (raíz cuadrada inclusive, así que hace falta sustituir el menor por un menor o igual en el for).

ahora, para saber la raíz cuadrada de un número hace falta importar la biblioteca math.h, además de tener en cuenta al compilar, poner la opción "-lm", con lo que un ejemplo de compilación puede ser:

gcc -lm -o prueba prueba.c

y el programa quedaría de la siguiente manera:



Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int main(void)
  6. {
  7.   int numero;
  8.   int i;
  9.   int es_primo;
  10.  
  11.   printf("Introduce el numero: ");
  12.   fflush(stdout);
  13.   if (scanf("%d", &numero) != 1 || numero < 2)
  14.       return EXIT_FAILURE;
  15.  
  16.   es_primo = numero == 2 || numero % 2 == 1;
  17.   for (i = 3; i <= sqrt(numero) && es_primo; i += 2)
  18.       if (numero % i == 0)
  19.           es_primo = 0;
  20.  
  21.    printf("%d %s primo\n", numero, (es_primo)?"es":"no es");
  22.  
  23.  return EXIT_SUCCESS;
  24. }
  25.  
  26.  

Saludos
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Calculo de números primos
« Respuesta #26 en: 14 Noviembre 2011, 09:06 am »

¡Buenas!

Puestos a liarla:
Código
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5.    int numero;
  6.    int i;
  7.    int es_primo;
  8.  
  9.    printf("Introduce el numero: ");
  10.    fflush(stdout);
  11.  
  12.    while(!scanf("%d", &numero))
  13.        while(getchar() != '\n');
  14.  
  15.    for (es_primo = (numero > 1 && (numero == 2 || numero % 2 == 1)) , i = 2 ; i * i <= numero && (es_primo = (numero % i != 0)); i++);
  16.  
  17.    printf("%d %s primo\n", numero, es_primo ? "es" : "no es");
  18.  
  19.    return 0;
  20. }
  21.  

XD

¡Saludos!
« Última modificación: 14 Noviembre 2011, 10:09 am por do-while » En línea

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


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Calculo de números primos
« Respuesta #27 en: 14 Noviembre 2011, 23:33 pm »

Hay que tener cuidado al utilizar el valor de retorno de scanf:
Código
  1. while(!scanf("%d", &numero))
  2.   while(getchar() != '\n');
En caso de error o fin de archivo la funcion retorna EOF, eso causaria la salida del bucle con el valor de la variable "numero" como (todavia) "no definido" o "basura".

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: 1 2 [3] 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,058 Último mensaje 10 Marzo 2010, 01:50 am
por Novlucker
NUMEROS PRIMOS
Programación C/C++
alviera 4 3,987 Último mensaje 7 Diciembre 2010, 06:39 am
por N0body
Duda acerca del calculo de combinaciones de numeros y letras en vb.net 2010
.NET (C#, VB.NET, ASP)
arturoro 5 2,403 Último mensaje 20 Diciembre 2015, 07:33 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines