Modulare Potenzierung Optimierung in Java - Code Review Stapelaustausch

Im Rahmen einer Zuweisung in Cryptography habe ich gebeten worden, Code zu schreiben, die modulare Potenzierung beinhaltet die Berechnung. Die BigInteger modPow ist in diesem Fall nicht erlaubt, müssen wir es selbst implementieren.

Ich habe den Auftrag arbeiten, aber ich glaube, meine modulare Exponentiationsfunktion nicht die größte in Bezug auf die Laufzeit ist. Es basiert auf der rechten Seite nach links Binärverfahren. Hier ist es.

Der Algorithmus berechnet (a ^ b) mod c.

Jede Richtung oder Feedback wäre enorm geschätzt.

Allerdings verwendet diese Lösung 2 Vergleiche, 2 Multiplikationen und eine Division innerhalb der Schleife.

Sie tun, 3 mod, sind sie nicht frei, auch (mod schafft neue interne Kopien und hat eine Kluft).

Ich verstehe nicht, warum Sie 2 bis Basis 16 analysieren? Es ist nicht das Ergebnis ändern, aber ich schlage vor, zu verwenden:

Sie möchten sich für oddnes überprüfen. Sie können dies in konstanter Zeit zu, wenn man sich das letzte Bit aussehen:

Und Sie können diese zwei loswerden

Anstatt durch 2 dividiert

Dies hat eine bessere Umsetzung.

Die letzte mod für die Rückkehr:

und schließlich kann man bessere Namen wählen und Sie könnten am Ende mit:

Kleiner und sinnloser Test mit Basis und Exponenten Länge von 50.000:
alt: ca. 20s
neu: um 1s
(Java: paar ms)

Wenn Sie eine weitere Optimierung wollen, müssen Sie bessere Algorithmen wählen. Ein kleiner Trick könnte sein, schaut in den Java-Quellcode. Wenn Sie nicht berechtigt sind, die Java-Methode zu verwenden, niemand verbietet Sie den Code in benutzen?

In Verbindung stehende Artikel