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).