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>';
    }
    ?>
  

Cliquez ici pour voir le résultat du code PHP