Edición didáctica en español. El código y sus salidas conservan el original.
Números primos en C
Comprueba divisores hasta la raíz cuadrada y trata correctamente los valores menores que dos.

Un primo es un entero mayor que uno con exactamente dos divisores positivos. Cero, uno y los negativos no son primos. Si N es compuesto, al menos uno de sus factores no supera su raíz cuadrada.
Descarta los pares salvo el dos y prueba divisores impares. Para enteros positivos grandes, la condición divisor <= N / divisor evita el posible desbordamiento de divisor * divisor. Detén la búsqueda cuando encuentres un divisor exacto.
Prueba 1, 2, un cuadrado como 49 y un primo. El método por división de prueba tarda O(sqrt(N)) y usa O(1) de memoria auxiliar.
Código C
#include <stdio.h>
#include <stdbool.h>
bool is_prime_optimized(int n) {
if (n <= 1) return false;
if (n <= 3) return true;
if (n % 2 == 0 || n % 3 == 0) return false;
// Check factors 6k +/- 1 up to sqrt(n)
for (int i = 5; (long long)i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
}
return true;
}
int main(void) {
int test_numbers[] = {1, 2, 17, 25, 29, 49, 97, 100};
int total = sizeof(test_numbers) / sizeof(test_numbers[0]);
printf("--- Prime Number Verification ---\n");
for (int i = 0; i < total; i++) {
int val = test_numbers[i];
printf("%3d -> %s\n", val, is_prime_optimized(val) ? "PRIME" : "NOT prime");
}
printf("\nPrimes between 1 and 50:\n");
for (int i = 1; i <= 50; i++) {
if (is_prime_optimized(i)) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}Abrir en el compiladorSalida esperada
--- Prime Number Verification --- 1 -> NOT prime 2 -> PRIME 17 -> PRIME 25 -> NOT prime 29 -> PRIME 49 -> NOT prime 97 -> PRIME 100 -> NOT prime Primes between 1 and 50: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
Preguntas frecuentes
¿Por qué el código y la salida siguen en inglés?
Las palabras clave, los identificadores y los textos que verifican las pruebas se conservan para no cambiar el programa. Las explicaciones y los controles están traducidos.