Exercice réalisé ci-dessous :
Ecrire un algorithme affichant tous les nombres parfaits jusqu’à un entier n. Pour rappel, un nombre est parfait si il est égal à la
somme de ses diviseurs stricts (c’est à dire excepté lui même). On
découpera le problème en construisant des procédures et fonction
selon le plan suivant :
Voici le code :
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
function estParfait($nombre) {
$somme = 0;
for ($diviseur = 1; $diviseur <= $nombre / 2; $diviseur++) {
if ($nombre % $diviseur == 0) {
$somme += $diviseur;
}
}
return $somme == $nombre;
}
function afficherNombresParfaitsJusquA($n) {
$nombresParfaits = array();
for ($nombre = 1; $nombre <= $n; $nombre++) {
if (estParfait($nombre)) {
$nombresParfaits[] = $nombre;
}
}
return $nombresParfaits;
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$n = intval($_POST["borne"]);
$resultats = afficherNombresParfaitsJusquA($n);
echo '<h2>Résultats :</h2>';
if (empty($resultats)) {
echo 'Aucun nombre parfait trouvé jusqu\'à la borne ' . $n;
} else {
echo 'Nombres parfaits jusqu\'à la borne ' . $n . ': <br>';
echo implode(", ", $resultats);
}
} else {
echo '<form method="post" action="' . htmlspecialchars($_SERVER["PHP_SELF"]) . '">';
echo 'Entrez la borne maximale (n): <input type="text" name="borne">';
echo '<input type="submit" value="Afficher">';
echo '</form>';
}
?>