Los números primos son bloques básicos de los números enteros. La factorización permite descomponer un número en factores más simples y es una idea central en muchos algoritmos.
En el tema anterior vimos divisibilidad, múltiplos y divisores. Ahora usaremos esas ideas para estudiar números primos y factorización.
Los números primos son importantes porque permiten construir otros números mediante multiplicación. En programación aparecen en ejercicios de algoritmos, criptografía, validaciones, generación de secuencias y optimización de cálculos.
Para trabajar con primos en JavaScript usaremos divisiones, restos con el operador %, ciclos y funciones.
Un número primo es un número natural mayor que 1 que tiene exactamente dos divisores positivos: 1 y él mismo.
En cambio, 12 no es primo porque tiene más divisores: 1, 2, 3, 4, 6 y 12.
console.log(7 % 2);
console.log(7 % 3);
console.log(7 % 4);
console.log(7 % 5);
console.log(7 % 6);
Ninguna de esas divisiones deja resto 0, por eso 7 no tiene divisores intermedios entre 1 y 7.
Los primeros números primos son:
El número 2 es el único primo par. Todos los demás números pares son divisibles por 2 y, por lo tanto, no son primos.
| Número | Divisores positivos | Clasificación |
|---|---|---|
| 2 | 1, 2 | Primo |
| 4 | 1, 2, 4 | Compuesto |
| 9 | 1, 3, 9 | Compuesto |
| 13 | 1, 13 | Primo |
Un número compuesto es un número natural mayor que 1 que tiene más de dos divisores positivos. Es decir, puede descomponerse como producto de números menores.
Los números compuestos no son “malos” ni menos importantes. Simplemente tienen una estructura interna que podemos analizar mediante sus factores.
El número 1 no se considera primo porque solo tiene un divisor positivo: él mismo. La definición de primo exige exactamente dos divisores positivos.
Esta regla puede parecer un detalle, pero es importante para que la factorización de números sea única.
function cantidadDivisores(numero) {
let cantidad = 0;
for (let i = 1; i <= numero; i++) {
if (numero % i === 0) {
cantidad++;
}
}
return cantidad;
}
console.log(cantidadDivisores(1));
console.log(cantidadDivisores(2));
console.log(cantidadDivisores(12));
Una forma simple de saber si un número es primo es probar si tiene algún divisor entre 2 y el número anterior. Si encontramos uno, el número no es primo.
function esPrimo(numero) {
if (numero <= 1) {
return false;
}
for (let divisor = 2; divisor < numero; divisor++) {
if (numero % divisor === 0) {
return false;
}
}
return true;
}
console.log(esPrimo(7));
console.log(esPrimo(12));
console.log(esPrimo(13));
Este algoritmo es fácil de entender, aunque no es el más eficiente para números grandes.
No hace falta probar todos los divisores hasta el número anterior. Si un número tiene un divisor mayor que su raíz cuadrada, necesariamente tendrá otro divisor menor que su raíz cuadrada.
Por eso podemos probar divisores solo hasta Math.sqrt(numero).
function esPrimo(numero) {
if (numero <= 1) {
return false;
}
for (let divisor = 2; divisor <= Math.sqrt(numero); divisor++) {
if (numero % divisor === 0) {
return false;
}
}
return true;
}
console.log(esPrimo(97));
console.log(esPrimo(100));
console.log(esPrimo(101));
Esta mejora reduce mucho la cantidad de pruebas necesarias.
Podemos combinar una función de primalidad con un ciclo para obtener todos los primos dentro de un rango.
function esPrimo(numero) {
if (numero <= 1) return false;
for (let divisor = 2; divisor <= Math.sqrt(numero); divisor++) {
if (numero % divisor === 0) return false;
}
return true;
}
const primos = [];
for (let numero = 1; numero <= 30; numero++) {
if (esPrimo(numero)) {
primos.push(numero);
}
}
console.log(primos);
Este patrón aparece en ejercicios de lógica, filtros de datos y problemas matemáticos.
Factorizar un número significa escribirlo como producto de otros números. Cuando lo escribimos como producto de números primos, hablamos de factorización prima.
La factorización prima descompone un número en sus “bloques multiplicativos” más simples.
| Número | Factorización prima |
|---|---|
| 12 | 2 × 2 × 3 |
| 18 | 2 × 3 × 3 |
| 45 | 3 × 3 × 5 |
| 100 | 2 × 2 × 5 × 5 |
Para factorizar un número, podemos dividirlo por el menor divisor posible tantas veces como sea necesario. Luego seguimos con el siguiente divisor.
function factorizar(numero) {
const factores = [];
let divisor = 2;
while (numero > 1) {
if (numero % divisor === 0) {
factores.push(divisor);
numero = numero / divisor;
} else {
divisor++;
}
}
return factores;
}
console.log(factorizar(60));
console.log(factorizar(84));
El arreglo resultante contiene los factores primos del número original.
En algunos casos conviene contar cuántas veces aparece cada factor primo. Por ejemplo, 60 = 2² × 3 × 5.
function contarFactores(factores) {
const conteo = {};
for (const factor of factores) {
conteo[factor] = (conteo[factor] || 0) + 1;
}
return conteo;
}
console.log(contarFactores([2, 2, 3, 5]));
console.log(contarFactores([2, 2, 2, 3, 3]));
Esta representación será útil cuando estudiemos máximo común divisor y mínimo común múltiplo.
Una aplicación directa es validar si un número ingresado cumple la condición de ser primo. Esta clase de validación se usa mucho en ejercicios de programación.
function esPrimo(numero) {
if (!Number.isInteger(numero) || numero <= 1) {
return false;
}
for (let divisor = 2; divisor <= Math.sqrt(numero); divisor++) {
if (numero % divisor === 0) {
return false;
}
}
return true;
}
const valor = 29;
if (esPrimo(valor)) {
console.log("El número es primo");
} else {
console.log("El número no es primo");
}
La función valida que el valor sea entero y mayor que 1 antes de probar divisores.
La factorización ayuda a entender por qué un número tiene ciertos divisores. Por ejemplo, si un número contiene el factor 2, entonces es divisible por 2. Si contiene los factores 3 y 5, entonces es divisible por 15.
const numero = 90;
const factores = [2, 3, 3, 5];
console.log(numero % 2 === 0);
console.log(numero % 3 === 0);
console.log(numero % 5 === 0);
console.log(numero % 15 === 0);
console.log(factores);
En programas más avanzados, esta idea se usa para simplificar fracciones, calcular divisores, optimizar búsquedas y resolver problemas de teoría de números.
console.log(Number.isInteger(7));
console.log(Number.isInteger(7.5));
console.log(2 % 2 === 0);
console.log(2 === 2);
Los números primos y la factorización conectan divisibilidad con algoritmos. Aunque son conceptos matemáticos básicos, permiten construir soluciones claras para validar números, descomponer valores y analizar estructuras multiplicativas.
En el próximo tema estudiaremos máximo común divisor y mínimo común múltiplo, dos herramientas que se apoyan directamente en divisores y factorización.