Re: [其他] Modular Exponentiation運算的原理

看板Math作者 ( )時間14年前 (2011/09/18 19:41), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
有人把這個叫做反覆平方法... 現在我們要求 a^b mod c 若 b 是偶數, 那 a^b ≡ [ a^(b/2) ]^2 (mod c) 若 b 是奇數, 那 a^b ≡ [ a^((b-1)/2) ]^2 ×a (mod c) 然後有 a^0 ≡ 1 (mod c) 所以可以寫成程式(assume Mod > 1): function fast_exp_mod(base, exponent, Mod) 1 if exponent=0 then 2 return 1 3 tmp ← fast_exp_mod(base, [exponent / 2], Mod) 4 tmp ← tmp ×tmp mod Mod 5 if exponent is odd number then 6 tmp ← tmp ×base mod Mod 7 return tmp 其時間複雜度為 O(lb exponent), []代表取floor 把這個程式改成非遞迴形式, 應該就是你在書上看到的寫法了 ※ 引述《vity (逍遙盃-佛得)》之銘言: : 大家好 : 我知道想計算 b^n mod m時 : 會先把 n用2進位表示 : 但是接下來的步驟就看不懂 : 例如3^644 mod 645 : 先把644用成 1010000100 : 但接著就只是照書上的演算法做, 不懂原理 : 似乎是看不懂這個, 讓我搞不懂RSA公開金鑰加密系統的原理, 只會計算 : 是這樣嗎... : 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.217.32.112 ※ 編輯: suhorng 來自: 61.217.32.112 (09/18 19:42)

09/18 19:45, , 1F
感謝
09/18 19:45, 1F
文章代碼(AID): #1ETTZz1l (Math)
文章代碼(AID): #1ETTZz1l (Math)