大杂烩(同余,欧拉,模运算)

· · 个人记录

前言

Chapter I 同余

a = pm + r , b = qm + r ,则 a 同余于 b ,记作 a \equiv b \pmod{m}

同余定理:

a \equiv b ,则

满足自反性,对称性,传递性,三种性质的关系,为等价关系

根据等价关系,可以把目标集合划分为若干个等价类

剩余类和剩余系

[0],[1],\dots [m-1]

每类各取一个代表元构成的集合称为模 m 的剩余系,一般取

Z_m = {0,1,\dots,m-1}

简化剩余系

对模数 m ,在剩余类 Z_m 中取出与 m 互质的数构成的集合,称为模 m 的简化(既约)剩余系,记作 Z_m^*

显然 Z_m^*| = \varphi_m,因此 Z_m^* 有时也叫做 \phi_m

这里有一个玄学的表达方式:\{x |\equiv k\pmod{m},k \in \{1,2,\dots,m-1\}\& (k,m)=1\},意思是当 k \in \{1,2,\dots,m-1\}(k,m)=1 时,有 x |\equiv k\pmod{m}

定义:\varphi_n \le n 且与 n 互质的正整数的个数

有必要写出式子了:

\varphi_n = n\times (1-\dfrac{1}{p_1}) \times (1-\dfrac{1}{p_2}) \times \dots \times (1-\dfrac{1}{p_k})

欧拉函数的重要玄学性质:

人类智慧思考题:运用欧拉函数,证明质数有无穷个

Chapter II 模运算

OI中常用的模运算,将运算对象集从整数集(Z)缩减到了模 m 的剩余系 Z_m = {0,1,\dots,m-1}

经典防负数化模运算:

(这里使用了 \% 而非 \mod {} 是为了避免式子又臭又长)

(a+b)\% m =(a \% m + b \% m) \% m (a-b)\%m = (a \% m - b \% m + m ) \% m a\times b \% m = (a \% m) \times (b \% m) \% m

加减法的取模非常的慢,尽量少在加减中用%运算。虽然优化比较简单,但是在该用的时候也不可避免。

所以对于上述相对于乘法而言,可以看淡点(但是还是要重视)。

——而乘法则可能会溢出。(a \% m) \times (b \% m) 也可能会爆掉存储范围。

方法1

快速幂打临时工:仍然快速龟速乘法

利用性质:

流程:

时间复杂度:0(\log n)

适用范围:

优点:

缺点:

方法2

神秘乘法:

利用性质:

流程:

int mulmod(int x,int y,int m){
    static const int BLEN=20,BMSK=(1<<20)-1;
    int yH=y>>BLEN,yL=y&BMSK;
    int ret=yH?((x*yH%m)<<BLEN)%m:0;
    return (ret+x*yL)%m;
}

适用范围:

时间复杂度:O(1)

优点:

缺点:

方法3

玄学乘法

利用性质:

流程:

#define LL long long 
LL mulmod(LL x,LL y,LL p){
    LL ret=x*y-(LL)((long double) x*y/m + 1e-8)*m;
    return ret<0?ret+m:retl
}

适用范围:

时间复杂度:同样是真正感人的 O(1)

优点:

缺点:

方法4

__int128

优点:

缺点:

乘法讲完了,那么除法呢?

b|a$ 时,如何计算 $\dfrac{a}{b}\mod m **方法1** ~~人类智慧~~公式: $$\dfrac{a}{b}\mod p = \dfrac{a\mod (b\times p)}{b}\mod p$$ ~~啊哈哈哈哈,证明略咯!~~ 适用范围:$b,m$ 互质与否都行 **方法2** 在下面:乘法逆元 --- ### Chapter III 乘法逆元 如果存在 $a^{-1}$ 满足 $a\times a^{-1} \equiv 1\pmod m$,则称 $a^{-1}$ 为 $a$ 模 $m$ 意义下的逆元 有了逆元便能转除法为乘法。 $\dfrac{a}{b}\mod m = (a\times b^{-1}) \mod m

乘法逆元存在条件:(a,m)=1

乘法逆元的常用求法:

费马-欧拉定理

(又称欧拉定理)

a^{p-1}\equiv 1\pmod m {\mathsf{\color{black}\colorbox{white}{如果正整数 a,m 互质,则}}} a^{\varphi_m}\equiv 1\pmod m

由这个定理可以得到

证明费马欧拉定理略。

费马小定理的另外一种形式:a^p\equiv a\pmod{p}

Chapter IV 幂塔

b\ge \varphi_m

a^b \equiv a^{b\mod \varphi_m + \varphi_m}\mod m

如果我们设

\varphi_{\varphi_{\dots_{\varphi_n}}}

(套 n\varphi恶俗玄学欧拉函数)

{\varphi^k}_p ,则 {\varphi^k}_p

\begin{cases}\varphi_{{\varphi^{k-1}}_p}&k>1\\\varphi_p&k=1\end{cases}

则当 k\ge 2\log_2 p 时,{\varphi^k}_p = 1