Optimisation modulaire exponentiation en Java - Code Review Stack échange
Dans le cadre d'une mission dans Cryptography On m'a demandé d'écrire du code qui consiste à calculer l'exponentiation modulaire. Le BigInteger modPow n'est pas autorisé dans ce cas, nous devons la mettre en œuvre nous-mêmes.
J'ai le travail d'affectation, mais je pense que ma fonction exponentiation modulaire est pas le plus grand en termes de temps d'exécution. Il est basé sur la méthode binaire de droite à gauche. Voici ce.
Les calcule d'algorithme (a ^ b) mod c.
Toute direction ou de rétroaction serait extrêmement appréciés.
Toutefois, cette solution utilise 2 comparaisons, 2 multiplications et une division à l'intérieur de la boucle.
Vous faites 3 mod, ils ne sont pas libres, trop (mod crée de nouvelles copies internes et fait un fossé).
Je ne comprends pas, pourquoi vous analysez 2 à base 16? Il ne change pas le résultat, mais je suggère d'utiliser:
Vous voulez vérifier oddnes. Vous pouvez à cette constante dans le temps si vous regardez le dernier bit:
Et vous pouvez vous débarrasser de ces deux
Au lieu de diviser par 2
Cela a une meilleure mise en œuvre.
Le dernier mod pour le retour:
et après tout, vous pouvez choisir de meilleurs noms et vous pourriez vous retrouver avec:
test à petite et dépourvue de sens avec la base et la longueur de l'exposant de 50,000:
vieux: environ 20 ans
nouvelles: environ 1 s
(Java: quelques ms)
Si vous souhaitez une optimisation plus poussée, vous devez choisir de meilleurs algorithmes. Un petit truc pourrait être de regarder dans le code source Java. Si vous n'êtes pas autorisé à utiliser la méthode Java, Noone vous interdit d'utiliser le code à l'intérieur?