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.