Exemple 2-1-4 «Nombres parfaits» - Script PHPInitiation à la programmation avec le langage PHP, §2 Structures de contrôle répétitives |
Un nombre entier positif est dit "parfait" si et seulement si il est égal à la somme de ses diviseurs qui lui sont inférieurs. Exemples: 6 = 1 + 2 + 3
On se limite ici à la recherche des nombres parfaits inférieurs ou égaux à 9999. Le bouton permet d'exécuter le script PHP. <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="robots" content="NoIndex,NoFollow"> <title>Nombres parfaits</title> </head> <body> <?php /* Nombres parfaits n = nombre testé s = somme des diviseurs de n qui sont inférieurs à n; si a est un diviseur de n inférieur à sqrt(n), alors s = s + a + n/a; si a est le diviseur de n égal à sqrt(n), alors s = s + a; critère: n est parfait si et seulement si (n == s); Exemple 6 == 1+2+3; */ $nmax = 9999; echo '6<br>'; for ($n=7; $n <= $nmax; $n++) { $s = 1; $amax=round(sqrt($n)); // calcul approximatif if ($amax*$amax > $n){ $amax = $amax - 1; // afin que $amax*$amax <= $n; } for ($a=2; $a < $amax; $a++) { if ($n%$a == 0) { $s = $s + $a + $n/$a; } } if ($amax*$amax==$n){ $s = $s + $amax; } if ($n == $s) { echo $n.'<br>'; } } echo "<p>Le nombre parfait suivant étant 33550336, le recours à des méthodes plus performantes s'avère nécessaire.</p>"; ?> </body> </html> Explicationa est un diviseur de n si et seulement si le reste de la division de n par a est nul. En PHP, la condition "si n modulo a est nul" s'écrit if ($n%$a == 0) |
Contact | Accueil > PHP > Initiation |