[問題] 模指數運算

看板C_and_CPP (C/C++)作者 (不知道)時間14年前 (2011/10/10 12:32), 編輯推噓0(0016)
留言16則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) dev C++ 問題(Question): 最近老師出了個程式作業要我們寫 模指數 b^n mod m 的運算 目前我想到的辦法是用char 陣列讀入輸入檔的數字 (有 被除數 被除數的次方 除數 ) 將char 中的數字轉成整數後利用餘數次方的性質瘋狂的做減法運算 (就是 n^2 mod m 的餘數 = n mod m 餘數的平方) 不過感覺效率很差, google 後有找到這些方法 http://aoowweenn.blogspot.com/2009/03/blog-post.html 只是看太懂這些性質, 想請問板上大大有沒有其他方法可以提示一下 讓我可以思考還有什麼性質以及方法可以用, 謝謝 <(_ _)> 餵入的資料(Input): 舉例來說 被除數 被除數次方 除數 123907862318756327 429867046 2208410817 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.114.32.225

10/10 13:37, , 1F
你先想想次方的合併吧...
10/10 13:37, 1F
不太懂@@a 可以麻煩再解釋嗎?

10/10 15:02, , 2F
你的例子被除數之值可以塞入 unsigned long long 裡,若
10/10 15:02, 2F

10/10 15:03, , 3F
確定如此,可參考這篇 http://ppt.cc/oneJ , 拉到
10/10 15:03, 3F

10/10 15:03, , 4F
14. 費馬測試 , 裡面 Montgomery,資料型態全改 u.l.l.
10/10 15:03, 4F

10/10 15:10, , 5F
補一下,裡面寫的 Montogomery 可能不適合你,因被除數平
10/10 15:10, 5F

10/10 15:11, , 6F
方"可能"會爆,看 mod_ 可能較適合.
10/10 15:11, 6F
謝謝t 大. 不過不知道有沒有可以把數字拆開算的方法? 比方20位數可以拆成前面10位跟後面10位來看 否則好像還要寫個自訂class 來解決@@a 謝謝 ※ 編輯: JiMor 來自: 58.114.32.225 (10/10 16:20)

10/10 17:25, , 7F
何不先直接mod?
10/10 17:25, 7F

10/10 23:13, , 8F
你一定會用到 20 位數嗎? unsigned long long 最大值
10/10 23:13, 8F

10/10 23:13, , 9F
是 19 位數, 這樣不行嗎?還是 "一定" 要拆成 array ?
10/10 23:13, 9F
因為老師給的測試檔超過20位數, 所以才想問有沒有其他辦法

10/10 23:45, , 10F
呃.... 大數運算另外刻就好了呀... 何必整合在一起呢?
10/10 23:45, 10F
另外刻是什麼意思? 小弟還是個菜鳥, 不太懂@@a

10/10 23:47, , 11F
其實是有個方法達到原po的需求,但文章至少1000字,想了
10/10 23:47, 11F

10/10 23:48, , 12F
就覺得很累,關鍵在於dec->bit array; hex->bcd.
10/10 23:48, 12F

10/10 23:48, , 13F
寫得好的話可能都可以發篇小論文了
10/10 23:48, 13F
我現在實做是宣告一個 int array[40], 裡面只放數字 0~9 然後昨晚把大數除法寫完, 測試發現如果數字在一定的範圍內算出的餘數沒問題 但是數字很大的話...... 結果會跟小算盤算出來的不同QQ 感覺我好像寫錯了= = ※ 編輯: JiMor 來自: 140.115.170.206 (10/11 19:31)

10/11 19:43, , 14F
就是把mod ,mul變成函式呀~~
10/11 19:43, 14F

10/11 21:02, , 15F
堅持搞大數的話,那就加油吧..不好刻。
10/11 21:02, 15F
嗯...... 我盡量努力QQ 題外話問一下, 想請問 t大PO的頁面中, Montgomery 那段code 有個 p >>= 1 是什麼意思 ※ 編輯: JiMor 來自: 140.115.50.29 (10/13 13:54)

10/13 14:33, , 16F
移位運算子 你該先念熟基本的,捨本逐末非智舉。
10/13 14:33, 16F
文章代碼(AID): #1EadLZ8L (C_and_CPP)
文章代碼(AID): #1EadLZ8L (C_and_CPP)