我一直在試圖最近實現模指數運算。我正在用VHDL編寫代碼,但我正在尋找更具算法性的建議。模冪指數器的主要組成部分是模乘器,我也必須自己實現。我對乘法算法沒有任何問題 - 它只是增加和移位,我已經做了一個很好的工作,弄清楚我的所有變量是什麼意思,這樣我就可以在相當合理的時間內繁殖。實現模運算的更好方法(算法問題)
我遇到的問題是在乘法器中實現模數運算。我知道執行重複減法是可行的,但它也會很慢。我發現我可以改變模數來有效地減去模的大倍數,但我認爲可能還有更好的方法來做到這一點。我使用的作品像這樣的算法(怪異的僞代碼如下):
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}
}
所以...這是一個很好的算法,或者至少一個良好的開端?維基百科沒有真正討論用於實現模運算的算法,並且每當我嘗試在其他地方搜索時,我都會發現真正有趣但卻難以置信的複雜(通常不相關)的研究論文和出版物。如果有一種明顯的方式來實現我沒有看到的,我真的很感激一些反饋。
是本顯著比乘法慢?它似乎不應該是;你有相同的基本組件。 – 2010-05-05 14:26:30
順便說一句,我也對數學家如何越來越多地撰寫維基百科文章感到沮喪。僅僅因爲使用高級概念和表示法可以很容易地表達出來並不意味着這是解釋它的最好方式;-)它與Stackoverflow上的討論和Mathoverflow上的討論類似。 – phkahler 2010-05-05 15:04:17