模運算與逆元:
取模定義:
取模基本性質:
設 \(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!}\)