Comprobar si un número es primo en C y C++
En esta lección vas a comprobar si un entero es primo probando los divisores hasta su raíz cuadrada.
Introducción
Un número primo es mayor que 1 y solo es divisible entre 1 y entre sí mismo. Para comprobarlo, se divide el número entre valores más pequeños. Pero basta con llegar hasta su raíz cuadrada, lo que hace el programa mucho más rápido.
Puntos importantes
- Activa los avisos del compilador (compiler warnings) y corrígelos todos.
- Entiende bien el tipo y la vida útil (lifetime) de cada valor.
- Comprueba siempre los datos de entrada y los límites de los índices de los arreglos.
Ejemplos de código C y C++
#include <stdio.h>
int main(void) {
int number = 29, prime = number > 1;
// A composite number has a factor no larger than its square root.
for (int divisor = 2; divisor * divisor <= number; ++divisor)
if (number % divisor == 0) { prime = 0; break; }
printf("%d is %sprime\n", number, prime ? "" : "not ");
}
29 is prime
#include <iostream>
int main() {
int number = 29;
bool prime = number > 1;
// Stop after the square root and on the first divisor.
for (int divisor = 2; divisor * divisor <= number && prime; ++divisor)
prime = number % divisor != 0;
std::cout << number << " is " << (prime ? "" : "not ") << "prime\n";
}
29 is prime
Comparación entre C y C++
El bucle solo continúa mientras divisor * divisor <= number, porque si el número tiene un divisor mayor que su raíz cuadrada, ese divisor va emparejado con otro más pequeño ya probado. En cuanto encuentra un divisor, la versión de C sale del bucle con break, mientras que la de C++ se detiene gracias a la condición && prime. El resultado muestra que 29 es primo.
C usa funciones procedurales pequeñas y muestra abiertamente cómo se representan los datos en memoria.
C++ sigue permitiendo trabajar a bajo nivel, pero añade tipos de biblioteca y abstracciones más seguras.
Ejercicios de práctica
Ejecuta las dos versiones y después modifica el código para ver la diferencia de seguridad que aporta cada lenguaje.
- Prueba entradas no válidas y valores límite.
- Compila con las opciones -Wall -Wextra -Wpedantic para activar más avisos.
- Pon las declaraciones comunes en un archivo de cabecera y la implementación en un archivo aparte.
Practica con un reto
Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.
- Verificación de número primo Determina si un número es primo. Fácil
- Listar Primos con un Criba Encuentra números primos hasta un límite marcando los múltiplos compuestos. Intermedio