coding challenge

Reto de programación 3: ¿Es un número primo?

Este reto de programación consiste en crear un método que imprima los número primos existentes entre 1 y 100. ¿Pero qué es un número primo?

En matemáticas, un número primo es un número natural mayor que 1 que tiene únicamente dos divisores positivos distintos: él mismo y el 1… El número 1, por convenio, no se considera ni primo ni compuesto.

Wikipedia

El enunciado del reto dice:

/*
 * Escribe un programa que se encargue de comprobar si un número es o no primo.
 * Hecho esto, imprime los números primos entre 1 y 100.
 */

He solucionado el reto de la siguiente manera:

<?php

declare(strict_types=1);

function PrimeNumber(): void
{
    for ($i = 2; $i <= 100; $i++) {
        if (isPrime($i)) {
            echo "{$i}\n";
        }
    }
}

function isPrime(int $number): bool
{
    for ($i = $number - 1; $i > 1; $i--) {
        if (($number % $i) === 0) {
            return false;
        }
    }

    return true;
}

// Test
PrimeNumber();

Creamos una función que recorre a través de un bucle for desde el número 2 al número 100, descartamos el 1 ya que no es considerado como primo.

Para cada valor de $i en el bucle, buscamos si es primo o no a través de otro método isPrime que devolverá true o false, ¿cómo hacemos esto? Este método recorre un bucle for descendente desde si mismo menos 1 hasta 2 (>1), y vamos dividiendo entre cada valor de $i. Si el resto de la división de nuestro número por $i da cero, significa que tiene un divisor además del 1 y de si mismo y por lo tanto no es primo. En este caso retornamos false y detenemos la iteración.

Un ejemplo, para comprobar si 4 es primo, el bucle for comenzará por el 3: 4/3 no da resto 0, por lo tanto itera al próximo número (que recuerdo es descendente). 4/2 sí da cero, por lo tanto 4 no es primo, devolvemos false y detenemos la iteración.

En caso de no encontrar ningún número que al dividir quede como resto 0, termina el bucle for y devolvemos true, es decir, es primo y por lo tanto lo imprimimos en pantalla.

También puedes verlo en GitHub.

¿Te ha resultado útil esta información? 🍺

Si este post te ha resuelto un problema, invítame a un café o a una cerveza. Con este pequeño gesto me animas a seguir escribiendo.

Comentarios

Deja un comentario

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

  • El fin del tratamiento es únicamente la moderación de comentarios para evitar spam
  • La legitimación es tu consentimiento al comentar
  • No se comunicará ningún dato a terceros salvo por obligación legal
  • Tienes derecho al acceso, rectificación y eliminación de los comentarios