Maison >développement back-end >C++ >Comment pouvons-nous extraire efficacement le terme T2 de T1 = T2 * N ! Vous utilisez l'analyse des exposants premiers ?

Comment pouvons-nous extraire efficacement le terme T2 de T1 = T2 * N ! Vous utilisez l'analyse des exposants premiers ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-05 16:57:10619parcourir

How Can We Efficiently Extract the T2 Term from T1 = T2 * N! Using Prime Exponent Analysis?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn