Autor
|
Tema: Calculo de números primos (Leído 12,717 veces)
|
s00rk
Desconectado
Mensajes: 195
|
No se puede utilizar dentro del if el break; y ya ? xD Terminara el for y continuara
|
|
|
En línea
|
|
|
|
CobraCY
Desconectado
Mensajes: 9
|
si, pero el está pidieron que utilicemos un flag. Así que hay que cumplir con sus exigencias xD.
Saludos.
|
|
|
En línea
|
|
|
|
jamatbar
Desconectado
Mensajes: 104
|
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
Mensajes: 104
|
Mi código ha quedado así: #include <stdio.h> int main() { int valor; int i; int flag = 1; printf("Introduzca un valor: "); for ( i = 2; i < valor && flag!=0; i++ ) if (0 == (valor % i)) {flag = 0; } if (flag == 1) printf(" %d es primo\n", valor ); else printf(" %d no es primo\n",valor ); return 0; }
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: #include <stdio.h> int main() { int valor; int i; int flag = 1; printf("Introduzca un valor: "); for ( i = 2; i < valor && flag!=0; i+=2 ) if (0 == (valor % i)) {flag = 0; } if (flag == 1) printf(" %d es primo\n", valor ); else printf(" %d no es primo\n",valor ); return 0; }
¿Con eso bastaría no? Saludos
|
|
« Última modificación: 13 Noviembre 2011, 23:50 pm por jamatbar »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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: #include <stdio.h> #include <stdlib.h> int main(void) { int numero; int i; int es_primo; printf("Introduce el numero: "); if (scanf("%d", &numero ) != 1 || numero < 2) return EXIT_FAILURE; es_primo = numero == 2 || numero % 2 == 1; for (i = 3; i < numero && es_primo; i += 2) if (numero % i == 0) es_primo = 0; if (es_primo) printf("%d es primo\n", numero ); else printf("%d no es primo\n", numero ); return EXIT_SUCCESS; }
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
Mensajes: 10
|
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: #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { int numero; int i; int es_primo; printf("Introduce el numero: "); if (scanf("%d", &numero ) != 1 || numero < 2) return EXIT_FAILURE; es_primo = numero == 2 || numero % 2 == 1; for (i = 3; i <= sqrt(numero ) && es_primo ; i += 2) if (numero % i == 0) es_primo = 0; printf("%d %s primo\n", numero , (es_primo )?"es":"no es"); return EXIT_SUCCESS; }
Saludos
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡Buenas! Puestos a liarla: #include <stdio.h> int main(void) { int numero; int i; int es_primo; printf("Introduce el numero: "); while(!scanf("%d", &numero )) for (es_primo = (numero > 1 && (numero == 2 || numero % 2 == 1)) , i = 2 ; i * i <= numero && (es_primo = (numero % i != 0)); i++); printf("%d %s primo\n", numero , es_primo ? "es" : "no es"); return 0; }
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
Mensajes: 1.639
|
Hay que tener cuidado al utilizar el valor de retorno de scanf: while(!scanf("%d", &numero ))
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
|
|
|
|
|