Algoritmo para Determinar si un Número es Primo en PSeInt (Guía 2026)

Nivel: Intermedio Tiempo: ~20 min

Los números primos son la base de la criptografía moderna y la seguridad en internet. Pero, ¿cómo le enseñamos a una computadora a identificarlos? En este tutorial de Lógica de Programación, desarrollaremos un algoritmo en PSeInt para detectar si un número es primo. Analizaremos dos enfoques: el método clásico de «conteo de divisores» (ideal para principiantes) y el método optimizado con «banderas lógicas» (para estudiantes avanzados), utilizando comandos como MOD, Para y Si-Entonces.

Conceptos Matemáticos para Programadores

Antes de escribir una sola línea de código, debemos tener clara la definición matemática para traducirla a lógica:

Definición de Número Primo

Un número entero mayor que 1 es primo si y solo si tiene exactamente dos divisores: el 1 y él mismo.
Ejemplos: 2, 3, 5, 7, 11…
Nota: El 1 NO es primo (solo tiene un divisor).

El Operador MOD (Residuo)

Para saber si un número A es divisible por B, usamos el módulo.
Si A MOD B == 0 -> La división es exacta (B es divisor de A).
Nuestro algoritmo buscará cuántas veces el residuo es cero.

Análisis del Algoritmo (Método de Contadores)

El enfoque más intuitivo es intentar dividir el número por todos los valores desde 1 hasta sí mismo:

  • ENTRADA Un número entero positivo ingresado por el usuario. Variable: num.
  • PROCESO 1. Inicializar un contador de divisores en 0.
    2. Crear un ciclo Para desde i=1 hasta num.
    3. Si num MOD i == 0, incrementamos el contador.
  • SALIDA Evaluación final:
    Si contador == 2, entonces ES PRIMO.
    Si no, NO ES PRIMO.

Código Fuente (Método Básico)

Archivo: PrimoBasico.psc
Algoritmo VerificarNumeroPrimo
    // 1. Definición de Variables
    Definir num, i, divisores Como Entero;
    
    // 2. Entrada de Datos
    Escribir "=== DETECTOR DE NÚMEROS PRIMOS ===";
    Escribir "Ingrese un número entero positivo:";
    Leer num;
    
    // Inicializamos el contador de divisores
    divisores <- 0;
    
    // 3. Proceso: Buscar divisores
    // Recorremos todos los números desde 1 hasta N
    Para i <- 1 Hasta num Con Paso 1 Hacer
        
        // Si el residuo es 0, encontramos un divisor
        Si num MOD i == 0 Entonces
            divisores <- divisores + 1;
        FinSi
        
    FinPara
    
    // 4. Salida y Lógica Final
    // Un primo debe tener EXACTAMENTE 2 divisores (1 y sí mismo)
    Escribir "--------------------------------";
    Si divisores == 2 Entonces
        Escribir "El número ", num, " ES PRIMO.";
    SiNo
        Escribir "El número ", num, " NO es primo.";
        Escribir "(Tiene ", divisores, " divisores)";
    FinSi
    Escribir "--------------------------------";
    
FinAlgoritmo

Diagrama de Flujo

⚠️ Errores Comunes sobre Primos

Muchos estudiantes fallan en este algoritmo por conceptos matemáticos, no de programación:

Creer que el 1 es Primo

Si ingresas el número 1 en el código básico, el bucle encontrará solo 1 divisor. Como divisores != 2, dirá correctamente que no es primo. Sin embargo, muchos intentan "arreglar" el código para que el 1 sea primo. ¡No lo hagas! Matemáticamente el 1 no es primo.

Ineficiencia Extrema

Si quieres verificar si el número 1,000,000 es primo, el código básico hará 1 millón de divisiones. Esto es lento. Si encontramos un divisor (ej: 2), ya sabemos que no es primo y deberíamos detener el ciclo inmediatamente.

Reto: Código Optimizado (Método de la Bandera)

Para números grandes, no necesitamos contar divisores. Basta con encontrar uno solo (aparte del 1) para saber que NO es primo. Además, solo necesitamos buscar hasta la mitad del número (o su raíz cuadrada).

Algoritmo PrimoOptimizado
    Definir n, i Como Entero;
    Definir esPrimo Como Logico;
    
    Escribir "Ingrese número a verificar:";
    Leer n;
    
    // Casos base: 1 o menores no son primos
    Si n <= 1 Entonces
        esPrimo <- Falso;
    SiNo
        // Asumimos que ES primo hasta demostrar lo contrario
        esPrimo <- Verdadero;
        
        // OPTIMIZACIÓN: Solo buscamos hasta la mitad (n/2) o raíz cuadrada
        // Empezamos en 2 porque todo número es divisible por 1
        Para i <- 2 Hasta trunc(n/2) Hacer
            
            Si n MOD i == 0 Entonces
                // ¡Encontramos un intruso! Ya no es primo.
                esPrimo <- Falso;
                
                // Rompemos el ciclo forzando el iterador al final
                // (En otros lenguajes se usa 'break')
                i <- n; 
            FinSi
            
        FinPara
    FinSi
    
    Si esPrimo Entonces
        Escribir ">> El número ES PRIMO";
    SiNo
        Escribir ">> El número NO ES PRIMO (Es compuesto)";
    FinSi
    
FinAlgoritmo

Preguntas Frecuentes (FAQ)

¿Por qué el 2 es el único primo par?
El 2 es divisible solo por 1 y 2. Cualquier otro número par (4, 6, 8...) es divisible por 2, por lo tanto, tiene al menos 3 divisores (1, 2, sí mismo) y deja de ser primo.
¿Cómo optimizar aún más el ciclo?
En lugar de ir hasta n/2, puedes ir hasta la raíz cuadrada: rc(n). Si un número no tiene divisores hasta su raíz cuadrada, no los tendrá después.
¿Qué pasa si ingreso números negativos?
Los números primos se definen en los enteros positivos (naturales > 1). El algoritmo optimizado maneja esto con la condición Si n <= 1, clasificando negativos como no primos.
¿Cómo imprimo los primeros N primos?
Necesitas anidar ciclos. Un ciclo externo Mientras que cuente cuántos primos llevas encontrados, y un ciclo interno que verifique si el número actual es primo.

¿Listo para el siguiente nivel?

Domina la lógica de programación con nuestra colección completa.

Ver Más Ejercicios Resueltos

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *