乘法逆元基礎實現

2022-05-11 16:20:03 字數 1083 閱讀 9752

今天來講講乘法逆元。

首先是模板題鏈結

首先,乘法逆元的定義還是簡單說一下:

若在mod p意義下,對於乙個整數a,有\(a\times b≡1(mod p)\),那麼這個整數d即為a的 乘法逆元,同時a也為d的乘法逆元

然後主要是**實現。

我們分為兩種種情況來求乘法逆元

一、擴充套件歐幾里得

已經在擴充套件歐幾里得演算法講過了,這種演算法也是較少無規律數演算法中較快的一種。

二、費馬小定理。

費馬小定理:

當\(p\)為質數時,對於任意整數\(a\),滿足\(a^p-a\)是\(p\)的整數倍,在\(\mod p\)意義下可以表示為:

\[\begin

a^p-a \equiv 0\pmod\\

a^p \equiv a\pmod \\

a^\equiv 1\pmod\\

a\times a^\equiv 1\pmod

\end

\]所以很明顯,只需要算出\(a^\mod p\)就是\(a\)在\(\mod p\)意義下的逆元,用快速冪算出來就可以了。

很明顯,這種要求這麼多數字的逆元的題目,不能再簡單地挨個單個算它的逆元了。

這個時候就需要一種演算法,能夠在很短的時間內求出這一連串數字在\(\mod p\)意義下的逆元,所以就出現了這種線性演算法

它能夠用\(o(n)\)的時間複雜度來求出1~n的每乙個逆元。

首先 \(1^\equiv 1\pmod \)(既然\(p\)是質數那麼\(p\)一定是\(≥2\)的整數)

然後設 \(p=k*i+r,(1也就是 \(k\) 是 \(p / i\) 的商,\(r\) 是餘數 。

再將這個式子放到\(\pmod p\)意義下就會得到:

\(k*i+r \equiv 0 \pmod p\)

然後乘上\(i^,r^\)就可以得到:

\(o(n)\)遞推公式:

inv[i]=(p-p/i)*inv[p%i]%p;
inv[1]初值賦\(1\).

ov.

乘法逆元及逆元求法

模運算 取餘運算,即a除以b得到的餘數,記為mod,又記為 模運算過程中,加減乘都可以先對a,b進行 p,然後再進行加減乘,最後再 p,結果不變 運算子優先順序,模運算和乘除法的運算子優先順序是一樣的 同餘 a和b除以p得到的餘數相同,即p可以整除 a b 求解 cfrac mod p 的值,因為除...

模板 乘法逆元

適用 求某乙個數在模意義下的乘法逆元。如果a p互質,那麼有ap a就是p的倍數,所以有ap a modp ap 1 1 modp 所以只要打乙個快速冪就ok了。code include using namespace std int n,p int power int x,int k return...

模板 乘法逆元

這是一道模板題 給定n,p求1 n中所有整數在模p意義下的乘法逆元。輸入格式 一行n,p 輸出格式 n行,第i行表示i在模p意義下的逆元。輸入樣例 1 複製10 13 輸出樣例 1 複製179 108112 534 1 n 3 106,n1 n 3 106,n輸入保證 p p p 為質數。先扔個線性...