Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Código que cuente números primos y pares en C++

Estas en el tema de Código que cuente números primos y pares en C++ en el foro de C/C++ en Foros del Web. Hola a todos. Tengo que hacer un programa en DEVC++ que al ingresar 5 números a un vector, me muestre cuantos (NO cuales) números son ...
  #1 (permalink)  
Antiguo 10/05/2013, 20:50
 
Fecha de Ingreso: mayo-2013
Mensajes: 4
Antigüedad: 10 años, 11 meses
Puntos: 0
Pregunta Código que cuente números primos y pares en C++

Hola a todos.
Tengo que hacer un programa en DEVC++ que al ingresar 5 números a un vector, me muestre cuantos (NO cuales) números son primos y cuantos son pares.
Por mas que intento hacerlo yo mismo, no lo logro, por favor ayúdenme facilitándome el código correspondiente o explicando que tengo que hacer.
Solo se usar las librerías: stdio.h, conio.h, string.h.
De antemano, muchas gracias.
  #2 (permalink)  
Antiguo 10/05/2013, 21:45
Avatar de ggomez91  
Fecha de Ingreso: octubre-2008
Mensajes: 181
Antigüedad: 15 años, 6 meses
Puntos: 13
Respuesta: Código que cuente números primos y pares en C++

Tu programa necesita dos partes que te recomiendo hagas en dos funciones.
Primero necesitas una forma de averiguar si un número x es primo o no, eso sería con una función bool:esPrimo(x). Ya que tengas esa función solo necesitas iterar sobre el vector y llamarla por cada elemento, si sí es primo entonces suma uno a un contador y listo, regresa el contador.

Haz un intento en código y publícalo aquí si no te sale, lo podemos checar pero haz tu intento.
  #3 (permalink)  
Antiguo 11/05/2013, 00:21
 
Fecha de Ingreso: mayo-2013
Mensajes: 4
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Código que cuente números primos y pares en C++

Hice este código, pero solamente me despliega las leyendas:
-Los números primos son: 0
-Los números pares son: 0
¿Que es lo que esta mal?

#include <stdio.h>
#include <conio.h>

int pares=0, primos=0, a[5] = {2,7,8,10,5},i=0;
main(){



for(i=0;i>4;i++){
if((a[i]==2)||(a[i]==5))
primos++;
else
if(a[i]%2==0)
pares++;
if(a[i]%1==0)
primos++;
}

printf("Los numeros primos son: %d \n", primos);
printf("Los numeros pares son: %d", pares);
getch();
}
  #4 (permalink)  
Antiguo 11/05/2013, 00:23
 
Fecha de Ingreso: mayo-2013
Mensajes: 4
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Código que cuente números primos y pares en C++

Abajo anexo el código que hice, pero no se que esta mal, te agradecería que me ayudaras :/
  #5 (permalink)  
Antiguo 11/05/2013, 03:57
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 3 meses
Puntos: 46
Respuesta: Código que cuente números primos y pares en C++

Para empezar, sin mirar ninguna otra cosa, el for está al reves. Debería ser cuando i<=4 no cuando es mayor, ya que eso nunca pasa y por eso siempre obtienes 0.
  #6 (permalink)  
Antiguo 11/05/2013, 08:40
Avatar de ggomez91  
Fecha de Ingreso: octubre-2008
Mensajes: 181
Antigüedad: 15 años, 6 meses
Puntos: 13
Respuesta: Código que cuente números primos y pares en C++

Use el highlight del foro para poner tu código e indéntalo.
Tiene razón l3m0n en lo del for, la condición está al revez.

Tus ifs no tienen llaves, siempre usa llaves en tus ifs aunque sean de solo una instrucción. Pónselos por que no sé bien hasta donde pensabas que abarcara cada uno.

Por otro lado, veo que validas si es par o primo dentro del mismo for, deberías extraer esa lógica a un par de funciones y llamarlas en el for:

Código C++:
Ver original
  1. for (...){
  2. if (esPar(x)){
  3.     pares++;
  4. }
  5. if (esPrimo(x)){
  6.     primos+++;
  7. }
  #7 (permalink)  
Antiguo 13/05/2013, 01:14
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Código que cuente números primos y pares en C++

Y rizando el rizo, si es par ya no es primo:

Código C++:
Ver original
  1. for (...){
  2. if (esPar(x)){
  3.     pares++;
  4. }
  5. else    // Si el numero es par, ya no es necesario comprobar si es primo
  6. if (esPrimo(x)){
  7.     primos+++;
  8. }
  #8 (permalink)  
Antiguo 13/05/2013, 18:04
Avatar de ggomez91  
Fecha de Ingreso: octubre-2008
Mensajes: 181
Antigüedad: 15 años, 6 meses
Puntos: 13
Respuesta: Código que cuente números primos y pares en C++

Cita:
Iniciado por Fw190 Ver Mensaje
Y rizando el rizo, si es par ya no es primo:

Código C++:
Ver original
  1. for (...){
  2. if (esPar(x)){
  3.     pares++;
  4. }
  5. else    // Si el numero es par, ya no es necesario comprobar si es primo
  6. if (esPrimo(x)){
  7.     primos+++;
  8. }
El 2 es primo y par
  #9 (permalink)  
Antiguo 13/05/2013, 19:15
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Código que cuente números primos y pares en C++

Este ejercicio es demasiado sencillo. Donde esta lo pesado es checar si el numero es primo.

Suponiendo que n >= 2 entonces solamente tienes que checar que en el rango de 2 a la raíz cuadrada de n no tenga ningún divisor.

Otra cosa n % 1 siempre te va a dar 0.

Por ejemplo en el código de ejemplo, la condición es bastante fácil de derivar.
Código:
i <= sqrt(n)
i^2 <= n
i*i <= n
// Como n & i son siempre mayores a 2 no hay problema con la desigualdad ni con la división
// Ademas la division de 2 enteros siempre regresan un entero
i <= n / i

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int is_prime(int n);
  4. int is_even(int n);
  5.  
  6. int main() {
  7.     int numbers[5] = {2, 7, 8, 10, 2147483647};
  8.     int even_nums = 0, prime_nums = 0, i;
  9.     for(i = 0; i < 5; i++) {
  10.         if(is_even(numbers[i])) even_nums++;
  11.         if(is_prime(numbers[i])) prime_nums++;
  12.     }
  13.  
  14.     printf("Even Numbers:  %d\n", even_nums);
  15.     printf("Prime Numbers: %d\n", prime_nums);
  16.  
  17.     return 0;
  18. }
  19.  
  20. int is_prime(int n) {
  21.     int i;
  22.     if (n == 2) return 1;
  23.     if(n <= 1 || n % 2 == 0) return 0;
  24.     for(i = 3; i <= n / i; i += 2)
  25.         if(n % i == 0) return 0;
  26.     return 1;
  27. }
  28.  
  29. int is_even(int n) {
  30.     return (n % 2) == 0;
  31. }

Buena Suerte.

PD: Los números de ejemplo dan 3 pares y 3 primos.
  #10 (permalink)  
Antiguo 14/05/2013, 08:26
 
Fecha de Ingreso: noviembre-2011
Mensajes: 50
Antigüedad: 12 años, 5 meses
Puntos: 3
Respuesta: Código que cuente números primos y pares en C++

Cita:
Iniciado por razpeitia Ver Mensaje
Este ejercicio es demasiado sencillo. Donde esta lo pesado es checar si el numero es primo.

Suponiendo que n >= 2 entonces solamente tienes que checar que en el rango de 2 a la raíz cuadrada de n no tenga ningún divisor.

Otra cosa n % 1 siempre te va a dar 0.

Por ejemplo en el código de ejemplo, la condición es bastante fácil de derivar.
Código:
i <= sqrt(n)
i^2 <= n
i*i <= n
// Como n & i son siempre mayores a 2 no hay problema con la desigualdad ni con la división
// Ademas la division de 2 enteros siempre regresan un entero
i <= n / i

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int is_prime(int n);
  4. int is_even(int n);
  5.  
  6. int main() {
  7.     int numbers[5] = {2, 7, 8, 10, 2147483647};
  8.     int even_nums = 0, prime_nums = 0, i;
  9.     for(i = 0; i < 5; i++) {
  10.         if(is_even(numbers[i])) even_nums++;
  11.         if(is_prime(numbers[i])) prime_nums++;
  12.     }
  13.  
  14.     printf("Even Numbers:  %d\n", even_nums);
  15.     printf("Prime Numbers: %d\n", prime_nums);
  16.  
  17.     return 0;
  18. }
  19.  
  20. int is_prime(int n) {
  21.     int i;
  22.     if (n == 2) return 1;
  23.     if(n <= 1 || n % 2 == 0) return 0;
  24.     for(i = 3; i <= n / i; i += 2)
  25.         if(n % i == 0) return 0;
  26.     return 1;
  27. }
  28.  
  29. int is_even(int n) {
  30.     return (n % 2) == 0;
  31. }

Buena Suerte.

PD: Los números de ejemplo dan 3 pares y 3 primos.
¿Para ver si un numero es primo basta con avanzar de 2 en 2 a partir del 3?, entiendo el i <= n / i, pero no sabia que no era necesario ir recorriendo cada numero desde el i hasta el sqrt(n).
  #11 (permalink)  
Antiguo 14/05/2013, 11:22
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Código que cuente números primos y pares en C++

Cita:
Iniciado por ElPatoGarrido Ver Mensaje
¿Para ver si un numero es primo basta con avanzar de 2 en 2 a partir del 3?
Suponiendo que n >= 3, entonces puedes aplicar esta micro-optimizacion. Ya que sabes que todos los demás números pares serán múltiplos de 2.

Cita:
Iniciado por ElPatoGarrido Ver Mensaje
entiendo el i <= n / i, pero no sabia que no era necesario ir recorriendo cada numero desde el i hasta el sqrt(n).
Según la definición de números primos que les enseñan en la escuela es: "Cualquier numero que es divisible SOLO entre 1 y el mismo"

Pero si te pones a pensar es un poco confusa esta definición, por que cualquier entero es divisible por 1 y también obviamente por si mismo.

Entonces 2 cumple, 3 cumple pero cuando llegas a 4 te das cuenta que divisible entre el mismo y 1 (de hechos todos tienen esa propiedad) hasta que te das cuenta la parte donde dice SOLO, entonces 4 es divisible por 2 y ya no cumple con la propiedad para ser un primo. Para checar que un numero es primo tienes que checar que no tenga ningún divisor entre 2 y la raíz cuadrada de n.

Etiquetas: c++, numeros, primos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:49.