學習筆記 關於如何求取模運算中進行除法

2021-08-18 15:00:07 字數 1139 閱讀 6821

近期,在密碼學課程中,在做基本的加密解密運算時,遇到了對除法的模運算,如19/11 mod26。課上給出的方法是求得反模通式-11,即用11對26(除數對模分解),但是最後必須剩下為1。所以在實踐中,試除了種以待定係數法求解為基礎的求法,這裡特作記錄,以備今後忘記。

以19/11 mod26為例。由於分析發現,這個算式相當於求解n個26加上19除以11,設此運算為整數運算。

①將19/11 mod26等效為(n * 26 + 19)/11,由此將問題轉換為求解n的值。

②若問題正確,即答案為整數,則 (n * 26 + 19)mod11=0,移項後整理得,n mod11= (-19) mod11 / 26 mod11

即 n = 3 / 4 mod11。

③  3 / 4 mod11又是乙個新的除式,這裡等效為 n =(m * 11 + 3) /4 , 同理(m * 11 + 3)mod4=0 ,移項之後的式子為

m mod4 = (-3)mod4 / 11 mod4  即 m = 1 / 3 mod4。

④   m = 1 / 3 mod4由此得到了個新的除式,利用上面的方法等效為化為m =(k * 4 + 1) /3 ,繼續化為 k = 2 / 1  mod 3

這樣算得結果即在 mod3 中而且數值比較小,可以直接得出 k = 2 。

⑤將 k =2 帶入之前的式子m =(k * 4 + 1) /3 得出 m =3 ,由此 n = 9 ,再帶入(n * 26 + 19)/11 計算結果為 23 ,驗證一下, 23  * 11 = 253,253 mod26 = 19 。

本法,主要思路是通過迭代運算將 mod的數,以及除數化為更小的值,方便計算,程式設計的話,可以使用借用遞迴,堆疊等方式來實現。該法還可以判斷是否有解,例如19 /10 mod26,由於10的尾數和26尾數湊不出9來,我們發現式子無解,那我們用該方法來計算一下。 19 /10 mod26 等效為 (n * 26 + 19)/10 ,n = 1 / 6 mod10, m =  5 / 4 mod6,k =  5 / 4 mod6, j = 3 / 2 mod4 ,i = 1 / 0 mod 2。除數出現了0 式子無意義,所以無解。該法適用於每次mod值以及除數的值多變的情況下,若是mod值以及除數已定,該法並不能高效地計算出答案,因為。每次都要經歷一定的迭代數,次數根據式子而定,不跟據數值大小而定,這是該法的計算優點。

關於負數求模運算

當我們遇到 2 3的時候,怎麼運算呢?通常乙個數m mod n 可以將m表示為 k n r 其中0 r n 1就是餘數,也是求模的結果。當m為負數的時候,這時候有兩種方法 1 先將負號提出去,直接求 m n,之後加上負號,最後還要加上n,就是最終結果了 例如 5 3 5 3 2 2 3 1 即 5 ...

數論學習筆記 快速冪 取模運算

快速冪,就是冪運算的一種快速演算法,它的時間複雜度為 在了解快速冪之前,我們需要先了解一下傳說中的二進位制。要知道,這個世界上只有10種人,一種是懂二進位制的人,另一種是不懂二進位制的人。滑稽 相對於十進位制,我們生活中所用的是十進位制,滿十進一。那麼二進位制,顧名思義,就是滿二進一。就像上上段的那...

Nginx學習筆記 Secure link模組

1 指定並允許檢查請求的鏈結的真實性以及保護資源免遭未經授權的訪問 2 限制鏈結生效週期 syntax secure link expression default 預設無 default 預設無 context http,server,location新建 etc nginx conf.d tes...