求逆元的幾種辦法

2021-07-15 12:39:12 字數 1639 閱讀 5032

補了一道cf題,順便看到有人求逆元的方法叼叼的,怪不得人家過題這麼快啊……

來總結一發……

求a關於n的逆元,即要解同餘方程ax

≡1(modn)

的解x. ax

≡1(modn)

⇔ax+

ny=1

僅當a與n互質時,存在

a 的逆元,利用擴充套件歐幾里得求解。

這裡n不一定是素數

ll extend_euclid(ll a, ll b, ll &x, ll &y)

ll r = extend_euclid(b, a%b, y, x);

y -= a/b*x;

return r;

}

x = (x % n + n) % n
當n是素數,有ap

−1≡1

(modp)

,則a−1

=ap−

2%p

當p比較大時,需要快速冪求解。非遞迴的寫法是墜好的。

#define ll long long

ll poo(ll a, int k, int

m) return res;

}

當n是質數,a是

(n+1

)的約數

時,a−

1=n+

1a這點也很好理解。當n是質數,0 < a < n時,(a

,n)=

1 ,則a肯定存在逆元。

而解出的n+

1a就滿足n+

1a⋅a

≡1(modn)

,故它是a的逆元。

在cf 696c,n=

1000000007時

2−1=

1000000007+1

2=500000004 3

−1=1000000007+1

3=333333336

求解就灰常方便了…

如果是求好多數的逆元,還是打個表比較方便,只要o(n)。

當n是大素數,求小於n的數的逆元。

設這個數是i,

令p=i

t+k,

其中t=

i/n,

k=i%

n 則i

t≡−k

(modp)

且i2t

2≡k2

(modp)

令i的逆元是i

−1,有兩種方法求i−

1 :i−

1≡−t

⋅k−1

≡(p−

t)k−

1%p i−

1≡it

2(k−

1)2%

p

都是通過先求k−

1 來求i−

1 ,兩者結果都是一樣的,別忘模p即可。注意:計算過程中可能會爆long long

int rev[n];

void get_rev()

}

暫時只用到了這幾種求逆元辦法,若還有新的繼續更…

求逆元的四種辦法

2018 03 17 12 06 26 還有乙個半小時就開始天梯賽排位賽了 乙個小時 看看求逆元吧 在補zoj2018三月賽c題的時候遇到的 之前遇見數學題基本上都是選擇性略過的 感謝四種辦法 例如 a b p 總結一下求逆元的適用情況 是否要求a b互質 是否要求p為質數 資料多大的時候可以用 時...

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

線性求逆元

在某些組合數的計數問題中,經常會用到逆元,這裡我們講一下如何線性求出1到n在模p意義下的逆元,注意p為質數。假設我們當前要求a在模p意義下的逆元。令p ak r,0 rp a k r,0 r 那麼 ak r 0 modp a k r 0 modp 然後恒等式變形,兩邊同時乘a 1 r 1 a 1 r...