Calcul rapide du carré de grands nombres
Problème :
Étant donné un bignum représenté comme un tableau dynamique de DWORDs non signés, la tâche est de trouver le carré du bignum le plus rapidement possible sans perdre précision.
Approche de la solution :
L'algorithme fourni calcule efficacement le carré d'un bignum en optimisant la multiplication à l'aide d'une approche diviser pour régner.
Multiplication de Karatsuba optimisée :
Après ajustements et optimisations, Karatsuba la multiplication est plus rapide que la multiplication classique O(N^2) pour les tailles d'entrée supérieures à 32*98 bits. Pour des nombres plus petits, la méthode sqr rapide reste plus efficace.
Multiplication de Schönhage-Strassen modifiée pour la mise en œuvre de Square :
Les transformations FFT et NTT ont été explorées pour l'accélération, mais leur la perte de précision et la complexité de mise en œuvre les ont rendus moins adaptés.
NTT Optimisation :
Des optimisations intensives de NTT ont abouti à une amélioration des performances, avec le seuil pour NTT sqr fixé à 31032 bits et NTT mul à 139632 bits.
Conclusion :
Pour les petits nombres, le rapide La méthode sqr s’avère être l’option la plus rapide. Passé un certain seuil, la multiplication Karatsuba devient plus efficace. Cependant, la recherche d'une alternative plus efficace au Karatsuba se poursuit.
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!