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 |