乘法逆元數論篇

2022-09-08 23:39:24 字數 1765 閱讀 8135

乘法逆元數論篇【易懂教學】

乘法逆元較多用於求解除法取模問題

例如:(a/b)%m時,可以將其轉換為(a%(b×m))/b,但這樣求解的過程依然涉及到除法,所以我們應當避免除法的直接計算。這時候就需要用到我們要講的乘法逆元。

可以使用逆元將除法轉換為乘法:假設b存在乘法逆元,即與m互質(充要條件)。

設c是b的逆元,即 b×c≡1(mod m)

那麼有 a/b=(a/b)×1=(a/b)×b×c=a×c(mod m)

即除以乙個數取模等於乘以這個數的逆元取模

但是在講乘法逆元之前就必須要引入乙個小的知識點:同余式

如果兩個正整數a和b之差能被n整除,那麼我們就說a和b對模n同餘,記作:a≡b (mod n)。

a≡b(mod n)等價於a與b分別用n去除,餘數相同。

求乘法逆元的演算法有好幾種,比如:擴充套件歐幾里得、費馬小定理、尤拉函式。下面是這幾種演算法適用的情況:

擴充套件歐幾里得演算法

要求a,n互為素數,存在唯一解

**部分

int extgcd(int a, int b, int& x, int& y)

else

return d;

}int mod_inverse(int a, int n)

///mod_inverse為對n取模a的逆元

費馬小定理
在n為素數的情況下,對任意的a都有a^n≡a(mod n)

如果a無法被n整除,則有a^(n-1)≡1(mod n)

可以在n為素數的情況下求出乙個數的逆元,a×a^(n-2)≡1(mod n),這時候,a^(n-2)為a的逆元。

**部分

///這裡用到了整數快速冪

ll mult(ll a,ll n) //求a^n%mod

return s;

} //mult(a,n-2);

尤拉函式

簡單介紹一下尤拉函式:在數論,對正整數n,尤拉函式是小於n的正整數中與n互質的數的數目(φ(1)=1)。

如果對尤拉函式有興趣的可以看看:尤拉函式

令φ(n)表示小於等於n且與n互素的正整數的個數。

如果a和n互質,則有a^φ(n)≡1(mod n),即 a×a^(φ(n)−1)≡1(mod n),那麼a^(φ(n)−1)為a的逆元。

在n為質數的時候φ(n) = n - 1。

**部分

///尤拉函式

int euler(int n)

}if(n != 1) res = res / n * (n - 1);

return res;

} ///求對mod = n,a的逆元

ll mult(ll a,ll n)

return s;

} //mult(a, euler(n)-1);

最後加上乙個尤拉函式打標的函式

int euler[maxn];

void euler()}}

}

數論 乘法逆元

一 乘法逆元定義 乘法逆元,是指數學領域群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...

數論 關於乘法逆元的證明

首先我們需要知道a p 1modp 那麼為什我們要用乘法逆元呢?答 在ab p 的時候如果 a 太大的話,long long也無法承受,所以我們轉換成另一種方式 a k p來替換那麼我們就可以將分子的大小限制在 p 以內,那麼就不會發生這樣的情況,所以我們令k為 b 的乘法逆元,那麼我們該如何求呢?...

數論 逆元 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,即...