🪶模運算的規則
三則運算
\((a+b)\%p=(a\%p+b\%p)\%p\)
\((a-b)\%p=(a\%p-b\%p)\%p\)
\((a\times b)\%p=(a\%p \times b\%p)\%p\)
除法的模運算和其它三則的不一樣。
\((a^b)\%p=((a\%p)^b)\%p\)
\(\\\)
結合律
\((a+b)\%p+c\%p=(a+(b+c))\%p\)
\((a\times b)\%p\times c\%p=(a\times (b\times c))\%p\)
\(\\\)
交換律
\((a+b)\% p = (b+a)\% p\)
\((a \times b)\% p = (b\times a) \% p\)
\(\\\)
分配律
\((a+b) \% p = ( a \% p + b \% p ) \%p\)
\(((a +b)\% p * c) \% p = ((a * c) \% p + (b * c) \% p) \% p\)
\(\\\)
定理
若\(a≡b (\% p)\),則對於任意的\(c\),都有\((a + c) ≡ (b + c) (\%p)\)。
若\(a≡b (\% p)\),則對於任意的\(c\),都有\((a * c) ≡ (b * c) (\%p)\)。
若\(a≡b (\% p)\),\(c≡d (\% p)\),則 \((a + c) ≡ (b + d) (\%p),(a - c) ≡ (b - d) (\%p),(a * c) ≡ (b * d) (\%p)。\)
\(\\\)
\(\\\)
🪶寫程序時
加減乘類
對於\(a+b,a\times b,a-b\)這類的算式:
在計算前先把\(a,b\)對\(p\)取模。
\(\\\)
乘方類
對於\({a}^{b}\)這樣的算式:
\(gcd(a,p)=1\)
對於\(a^b\)這類的算式,可以在計算前先把\(a\)對\(p\)取模,再把\(b\)對\(\varphi(p)\)取模(歐拉定理),在進行乘方運算。
\(gcd(a,p)\ne 1\)
也可以運用擴展歐拉定理進行運算。
\(\\\)
除類
前提:\(b\)與\(p\)互質
對於\(\frac{a}{b}\)這樣的算式:
先把\(a,b\)各自對\(p\)取模,求\(b\)在模\(p\)意義下的逆元,再計算\(a*b^{-1}\% p\)。