进行模运算时的一些注意事项



????模运算的规则

三则运算

\((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\)。