數論(求逆元)

2021-09-01 17:22:53 字數 987 閱讀 5887

在密碼學中我們經常需要用到逆元,尤其在rsa公鑰密碼體制中。下面簡介一下求逆元的通用方法,廣義歐幾里得除法的逆運算。

如果a,m互素的話,那麼根據歐幾里得除法,最終會得到餘數為1,此時我們可以消去中間變數,最終得到sa+tm=(a,m)=1,兩邊同時除以m可以得到sa=1(mod m),顯而易見可以得到s是a模m的逆元。

求逆元步驟就分為兩部:1.判斷a,m是否互素;2.根據廣義歐幾里得除法計算逆元,即s。

引用我們上課的ppt

通過上面的方法逐層迭代,可以求得最後的sa+tm=1,最後我們讓左右兩邊同時模m,得到sa=1(mod m),那麼根據乘法逆元的定義,可以得到s即為a模m下的逆元,即上圖中a的逆元是193,下面上**,我用的是遞迴的思想,自底向上進行遞迴

#include using namespace std;

int x=0,y=0;

//fun1用來判斷兩個數是否互素

bool fun1(int a,int m)

else

r3=-1;

while(r3!=0)

else

if(r1%r2==1)

//先求底層的結果,得到底層的x和y值

fun2(r2,r1%r2);

//然後迭代本層次的x和y系數值

int temp=x;

x=y;

y=temp-y*(r1/r2);

}int main()

else

{ cout<

數論 逆元 O(n)求逆元

傳送門 這是乙個學長的部落格,但是看了好幾遍都沒記住,所以決定自己寫一下。所謂o n 求逆元就是遞推,下面是證明 inv i mod mod i inv mod i 證明 設 t mod i,k mod i 則 t i k 0 mod mod 移項得到 t i k mod mod 兩邊同除i k,即...

數論 線性求所有逆元的方法

前幾天在看 lucas 定理的時候發現要求 1,2 p 1modp 1,2,p 1modp 的逆元,然後就看到了乙個 n n 的做法發現太神了,雖然想起來是挺簡單的 這個做法實際上是這樣的,首先 1 1 1 modp 1 1 1 modp 然後我們設 p k i r r1 i p p k i r,r...

數論 乘法逆元

一 乘法逆元定義 乘法逆元,是指數學領域群g中任意乙個元素a,都在g中有唯一的逆元a 具有性質a a a a e,其中e為該群的單位元。例如 4關於1模7的乘法逆元為多少?4x 1 mod 7 這個方程等價於求乙個x和k,滿足 4x 7k 1 其中x和k都是整數。若ax 1 mod f,則稱a關於1...