數論中的重要內容注意:本文只討論模數為質數的情況,因為當模數為合數時,不一定所有數都有逆元
在\(\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...