模運算與逆元

programmingysx發表於2024-06-29

模運算與逆元:

取模定義:

\[a\bmod n\begin{cases} a-\lfloor\frac{a}{n}\rfloor\times n \ \ \ \ \ a\geq0\\ -(-a\bmod n)\ \ \ a<0 \end{cases} \]

 

取模基本性質:

\(a_0=a\bmod n,b_0=b\bmod n\)

  • \((a+b)\bmod n=((a\bmod n)+(b\bmod n))\bmod n\)

\(a+b\equiv a_0+b_0(\bmod n)\)

  • \((a\times b)\bmod n=((a\bmod n)\times (b\bmod n))\bmod n\)

    \(a\times b\equiv a_0\times b_0(\bmod n)\)

  • 對於任意正整數 \(k\) ,有 \(a\bmod n=(a\bmod kn)\bmod n\)

  • \(k \mid a\)​,有 \(\frac{a}{k}\ mod\ n=\frac{a\ \bmod \ kn}{k}\)

\(\frac{a}{k}=x\)

\[x-\lfloor\frac{x}{n}\rfloor\times n=\frac{xk-\lfloor\frac{xk}{kn}\rfloor\times kn}{k} \]

 

同餘:

若整數 \(a,b\) 除以正整數 \(m\) 的餘數相等,則稱 \(a,b\)\(m\) 同餘,記為 \(a\equiv b (\bmod m)\)

逆元:

\(a\) 為整數,\(n\) 為正整數,若整數 \(b\) 滿足,\(ab\equiv 1(\bmod n)\),則稱 \(b\)\(a\)\(n\)​ 的逆元。

  • 當且僅當 \(\gcd(a,n)=1\) 時, \(a\)\(n\) 的逆元存在。
  • 如果 \(b_1,b_2\)\(a\)\(n\) 的逆元,則必有 \(b_1\equiv b_2(\bmod n)\) ,即 \(a\)\(n\) 的逆元在模 \(n\) 意義下唯一。

由於 \(a\) 的逆元唯一,可記為 \(a^{-1}\)\(\frac{1}{n}\) 。可以定義 \(\frac{1}{a}\bmod n\)\(a\)\(n\) 的逆元中絕對值最小的數,並取與 \(a\)​ 相同的符號。

 

費馬小定理:

對於質數 \(p\) 和任意整數 \(a\) ,若 \({\rm gcd}(a,p)=1\) ,則 \(a^p\equiv a (\bmod p)\)

設有數列 \(S=\{1,2,3,\cdots,p-1\},S\bmod p=S\)

\(S \times a = a,2a,3a,\cdots,(p-1)a\)

\(\therefore (S\times a\bmod p=(S\bmod p\times\ a\bmod p)\bmod p\)\(({\rm gcd}(a,p)=1)\)

\(\therefore\) 上式\(=S\times (a\bmod p)\)\({\rm gcd}(p,a\bmod p)=1\)

\(\therefore \prod_{i=1}^{p-1}i\equiv \prod_{i=1}^{p-1}a\times i\ (\bmod p)\)

\(\therefore (p-1)!\equiv a^{p-1}\times (p-1)!(\bmod p)\)

\(\therefore 1\equiv a^{p-1}(\bmod p)\)
\(\therefore a\equiv a^p(\bmod p)\)

 

求逆元:

\(p\) 為質數,且 \(\gcd(a,p)=1\) ,則 \(a^{-1}\equiv a^{p-2}(\bmod p)\) 。 計算時間複雜度 \(O(\log p)\)

\(a^{p-1}\equiv 1(\bmod p)\)

\(\therefore a\times a^{p-2}\equiv 1(\bmod p)\)

\(\therefore a^{-1}\equiv a^{p-2}(\bmod p)\)

 

線性求逆元:

程式碼
	inv[1] = 1;
	for(int i=2; i<=n; ++i) 
		inv[i] = ((-1LL*(p/i) % p ) * inv[p%i] % p + p ) % p;

$ \because p\bmod i=p-\lfloor\frac{p}{i}\rfloor\times i$

\(\therefore p=\lfloor\frac{p}{i}\rfloor\times i+(p\bmod i)\)

\(\therefore 0\equiv\lfloor\frac{p}{i}\rfloor\times i+(p\bmod i)(\bmod p)\)

\(\therefore -(p\bmod i)\equiv\frac{p}{i}\times i(\bmod p)\)

\(\therefore -\frac{\lfloor \frac{p}{i}\rfloor\times i}{p\ \bmod\ i}\equiv 1(\bmod p)\)

\(\therefore \frac{1}{i}\equiv-\frac{\lfloor \frac{p}{i}\rfloor}{p\ \bmod\ i}\)

 

求階乘逆元:

程式碼
	inv[max1]=ksm(jie[max1],mod-2);//根據費馬小定理求逆元
	for(int i=max1-1;i>=1;i--){//逆元遞推
		inv[i]=cheng(inv[i+1],i+1);
	}

對於已知的 \((n+1)!\) 的逆元,只需將其乘上 \(n+1\) 即可得到 \(n!\) 的逆元。
\(\frac{1}{(n+1)!}\times (n+1)=\frac{1}{n!}\)

 

相關文章