乘法逆元求法

2022-05-01 15:00:15 字數 1554 閱讀 8105

數論中的重要內容

注意:本文只討論模數為質數的情況,因為當模數為合數時,不一定所有數都有逆元

在\(\bmod\ p\)的意義下,我們把\(x\)的乘法逆元寫作\(x^\)。乘法逆元有這樣一條性質:

\[x \times x^ \equiv 1\ (\bmod\ p)

\]乘法逆元有什麼用呢?

模意義下的除法運算

除法運算對於模運算來說並不是「封閉」的,所以我們可以把除法轉化成乘法

前置知識:「快速冪」

\(a^ \equiv 1 (\bmod\ p)%\)

經過變形,可得

\(a \times a^ \equiv 1(\bmod\ p)\)

由定義可得,\(a\)的乘法逆元就是\(a^\)

這就要用到「快速冪」

inline int slowpower(int a, int b, int p) 

return ans;

}inline int invmod(int x, int p)

輸出1到n的逆元

/* -- basic headers -- */

#include #include #include #include #include /* -- stl iterators -- */

#include #include #include #include /* -- external headers -- */

#include #include /* -- defined functions -- */

#define for(a,x,y) for (int a = x; a <= y; ++a)

#define forw(a,x,y) for (int a = x; a < y; ++a)

#define bak(a,y,x) for (int a = y; a >= x; --a)

namespace fastio

while (isdigit(ch))

return s * x;

}inline void __basic_putint(long long int x)

if (x >= 10) __basic_putint(x / 10);

putchar(x % 10 + '0');

}inline void putint(long long int x, char external)

}namespace solution

return ret;

}}signed main()

invf[n] = slowpower(fac[n], ha - 2);

for (long long int i = n - 1; i >= 1; --i)

for (long long int i = 1; i <= n; ++i)

return 0;

}

乘法逆元及逆元求法

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

逆元以及線性逆元求法

對於乙個數a,如果a a 1 1 modp 那麼a 1是a對於p的逆元 在除法中,除以乙個數等於乘上這個數的逆元,即x y x y 1 modp 求單個逆元可以用費爾馬小定理 對於質數p,a p 1 1 modp 那麼a p 2 a a p 1 1 modp 所以a 1 a p 2 用快速冪求即可 ...

模板 乘法逆元

適用 求某乙個數在模意義下的乘法逆元。如果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...