Exemple 2-1-4 «Nombres parfaits» - Script PHP

Initiation à 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
28 = 1 + 2 + 4 + 7 + 14

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>

Explication

a 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