Décomposition en facteurs premiers
|
AlgorithmeCet algorithme, simple et dépourvu de sophistication, essaie de diviser le nombre donné n par 2, puis par les nombres impairs p = 3, 5, 7, 9, ... Il y a des essais inutiles, comme tenter de diviser n par 9, mais la simplicité de l'algorithme atténue ce défaut. On évite ainsi de créer une liste de nombres premiers dont la gestion présenterait un coût non négligeable. En faisant appel à des algorithmes plus raffinés, il serait possible de factoriser de plus grands entiers. Cependant, quelle que soit la méthode utilisée, la factorisation de très grands entiers demeure hors de portée, car la durée des calculs est rédhibitoire. Dans l'avenir, l'ordinateur quantique pourra faire sauter ce verrou. Critère d'arrêtLorsqu'on arrive à n = 1, la factorisation est terminée, mais on peut appliquer un critère d'arrêt qui raccourcit drastiquement la liste des diviseurs p à essayer. Montrons que, dans le contexte de l'algorithme, si 1 < n < p*p, alors n est un nombre premier. En effet,
En langage PHPInput: $n via un formulaire HTML. $out1 = "<h3>".$n." = "; $out2 = ""; $n0 = $n; $suivant = false; $p = 2; $e = 0; while ($n % $p == 0) { $n = $n / $p; $e++; } if ($e >= 1) { if ($suivant) { $out1 .= ' × '; } else { $suivant = true; } $out1 .= $p; if ($e > 1) { $out1 .= '<sup>' .$e.'</sup>'; } elseif ($p==$n0){ $out2 .= '<h3>'.$n0 ." est premier</h3>"; } } $p = 3; while ($n > 1) { $e = 0; while ($n % $p == 0) { $n = $n / $p; $e++; } if ($e >= 1) { if ($suivant) { $out1 .= ' × '; } else { $suivant = true; } $out1 .= $p; if ($e > 1) { $out1 .= '<sup>' .$e.'</sup>'; } elseif ($p==$n0){ $out2 .= '<h3>'.$n0 ." est premier</h3>"; } } if($n < $p*$p) { $p = $n; } else { ++$p; ++$p; } } $out1 .= '</h3>'; if (strlen($out2)==0){ echo $out1; } else { echo $out2; } |
Contact | Accueil > Mathématiques dans la culture générale > Nombres premiers > Table de nombres factorisés |