Ich habe kürzlich versucht, einen modularen Potenzierer zu implementieren. Ich schreibe den Code in VHDL, aber ich suche einen eher algorithmischen Rat. Die Hauptkomponente des modularen Exponentiators ist ein modularer Multiplikator, den ich auch selbst implementieren muss. Ich hatte keine Probleme mit dem Multiplikationsalgorithmus - es fügt nur hinzu und verschiebt sich und ich habe einen guten Job dabei gemacht herauszufinden, was alle meine Variablen bedeuten, so dass ich in einer ziemlich vernünftigen Zeitmenge multiplizieren kann.Bessere Möglichkeiten, eine Modulo-Operation zu implementieren (Algorithmusfrage)
Das Problem, das ich habe, ist mit der Implementierung der Modulo-Operation im Multiplikator. Ich weiß, dass wiederholte Subtraktionen funktionieren, aber es wird auch langsam sein. Ich fand heraus, dass ich den Modul verschieben könnte, um große Vielfache des Moduls effektiv zu subtrahieren, aber ich denke, dass es immer noch bessere Möglichkeiten geben könnte, dies zu tun. Der Algorithmus, den ich bin Werk so etwas wie dieser mit (seltsam Pseudo-Code folgt):
result,modulus : integer (n bits) (previously defined)
shiftcount : integer (initialized to zero)
while((modulus<result) and (modulus(n-1) != 1)){
modulus = modulus << 1
shiftcount++
}
for(i=shiftcount;i>=0;i--){
if(modulus<result){result = result-modulus}
if(i!=0){modulus = modulus >> 1}
}
So ... ist dies ein guter Algorithmus, oder zumindest ein guter Anfang? Wikipedia diskutiert nicht wirklich Algorithmen zur Implementierung der Modulo-Operation, und wenn ich versuche, anderswo zu suchen, finde ich wirklich interessante, aber unglaublich komplizierte (und oft nicht verwandte) Forschungsarbeiten und Publikationen. Wenn es einen offensichtlichen Weg gibt, das zu implementieren, was ich nicht sehe, würde ich ein Feedback sehr begrüßen.
dies als Multiplikation deutlich langsamer ist? es scheint nicht so zu sein; Sie haben die gleichen grundlegenden Komponenten. –
BTW, ich bin auch frustriert darüber, wie Wikipedia-Artikel zunehmend von Mathematikern geschrieben werden.Nur weil etwas mit fortgeschrittenen Konzepten und Notationen leicht ausgedrückt werden kann, heißt das nicht, dass es der beste Weg ist, es zu erklären ;-) Es ähnelt den Diskussionen auf Stackoverflow im Vergleich zu denen auf Mathoverflow. – phkahler