|
Rappelons que la notation n!, factorielle n , désigne le produit des n premiers entiers naturels non nuls :
n! = 1 × 2 × ... × n
Le problème, dans le calcul de n!, est la très rapide croissance de ce célèbre produit. En dehors d'un calcul manuel et laborieux, on obtiendra généralement :
Quelques machines spécialisées dans le calcul formel et certains logiciels mathématiques onéreux (Derive, Mapple, Mathematica) fourniront, à la demande, un nombre important de chiffres significatifs. L'objectif est ici de faire aussi bien.
Le procédé est très simple : il suffit de travailler dans une base élevée, nous choisissons ici 10000, et de mettre en place l'algorithme de division dans cette base, calquée sur celle de la division en base 10. Cet algorithme est utilisé dans les calculs précis des nombres π et e décrits dans ChronoMath :
Apprenons à l'ordinateur la multiplication d'un nombre entier par un nombre de 400 chiffres (digits) : le multiplicande Z est un entier possédant 400 digits, le multiplicateur est un entier "normal" m.
Si B est la base utilisée (ici B = 10000), Z est de la forme :
Les Ti, pour i variant de 0 à n = 100, sont les chiffres (tranches à 4 chiffres en base 10) de notre système à base B. On effectue la multiplication par m de "droite" à "gauche" :
Tn devient TnB que l'on écrit sous la forme B.q + r en effectuant une division euclidienne. Par suite, le dernier "chiffre" est maintenant Tn = r;
B(Tn-1 + q) devient alors B(Bq' + r') = B2q' + Br'. Par suite l'avant dernier "chiffre" Tn-1 est maintenant r'.
Le cas de la multiplication de To est particulier : il doit être multiplié par m et hériter du dernier quotient q. Un risque de dépassement peut exister : u ne doit pas dépasser 9999. Si le dépassement a lieu, il nous faut une tranche supplémentaire : il y a un dépassement de capacité. Le programme ci-dessous affiche également la valeur approchée de n! au moyen de la formule de Stirling :
avec r(n) = 1/12n + 1/288n2 + o(1/n3)
! le
dépassement de capacité a lieu pour pour n > 212
!
Les tranches
étant dimensionnées à 100, on a au total 101 tranches de
4 chiffres, soit 404 digits.
La formule d'approximation de Stirling est "out" au-delà de n = 170...
<SCRIPT LANGUAGE=JavaScript> function go() |
Calcul de 30! |
Calcul de 100! |
Calcul de 200! |
n!, problème du représentant de commerce et conjecture P = NP : »