14/05/2013, 08:26
|
| | Fecha de Ingreso: noviembre-2011
Mensajes: 50
Antigüedad: 13 años, 1 mes Puntos: 3 | |
Respuesta: Código que cuente números primos y pares en C++ Cita:
Iniciado por razpeitia 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#include <stdio.h> int is_prime(int n); int is_even(int n); int main() { int numbers[5] = {2, 7, 8, 10, 2147483647}; int even_nums = 0, prime_nums = 0, i; for(i = 0; i < 5; i++) { if(is_even(numbers[i])) even_nums++; if(is_prime(numbers[i])) prime_nums++; } printf("Even Numbers: %d\n", even_nums ); printf("Prime Numbers: %d\n", prime_nums ); return 0; } int is_prime(int n) { int i; if (n == 2) return 1; if(n <= 1 || n % 2 == 0) return 0; for(i = 3; i <= n / i; i += 2) if(n % i == 0) return 0; return 1; } int is_even(int n) { return (n % 2) == 0; }
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). |