Dans cet article, l'auteur discute d'une méthode rapide et précise pour calculer la factorielle d'un grand nombre à l'aide d'une bibliothèque de grands nombres à virgule fixe. Une question récurrente concernant l'implémentation était l'extraction du terme T2 du produit T1 = T2 * N!, où T1 et N! sont déjà connus. Pour trouver le terme T2, l'auteur a mené une analyse sur les exposants premiers et a proposé une formule pour le calculer :
T2(4N) = multiplication(i=all primes<=4N) of [i^sum(j=1,2,3,4,5,...4N/(i^j)) of [(4N/(i^j))%2]]
Les sous-termes de T2 ont l'exposant e pour premier i à l'intérieur du terme T2(N) qui peut être calculé comme ceci :
for (e=0,j=N4;j;e+=j&1,j/=p);
où e est l'exposant, p est premier et N4 est 4*N
Le terme T2 calculé est ensuite utilisé pour optimiser le calcul des factorielles, et l'algorithme résultant présente une complexité de calcul proche de ~ O(log(n)).
Des mesures temporelles approximatives sont fournies pour les 128 premières factorielles. L'auteur reconnaît que cette implémentation ne peut pas être simplifiée davantage et est déjà hautement optimisée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!