大杂烩(同余,欧拉,模运算)
前言
- 集训笔只因
Chapter I 同余
设
同余定理:
若
-
a \pm k \equiv b \pm k \pmod{m} $ 范围:$ k \in N -
a k \equiv b k \pmod{m} $ 范围:$ k \in N^+ -
a^k \equiv b^k \pmod{m} $ 范围:$ k \in N^+ -
-
同余的性质
-
自反性,对称性,传递性
满足自反性,对称性,传递性,三种性质的关系,为等价关系。
根据等价关系,可以把目标集合划分为若干个等价类。
剩余类和剩余系
- 对于模数
m ,利用同余关系(即n=mk+r 中的余数r ) 可以把整数集合 Z 划分为m 个等价类,称作模m 的剩余类,记作
每类各取一个代表元构成的集合称为模
简化剩余系
对模数
显然
这里有一个玄学的表达方式:
- 再探欧拉函数
定义:
有必要写出式子了:
欧拉函数的重要玄学性质:
-
欧拉函数是个积性函数:
\varphi_n = \prod\limits_{i=1}^{k}\varphi(p_i^{r_i}) -
其中
\varphi_{p^k} = p^k - p^{k-1} -
其他性质还有:
-
\varphi_n(n>2)$ 的所有元素之和为 $\dfrac{n\varphi_n}{2} -
n = \sum\limits_{d|n} \varphi_d
人类智慧思考题:运用欧拉函数,证明质数有无穷个
Chapter II 模运算
OI中常用的模运算,将运算对象集从整数集(
-
将无限转变为有限
-
方便存储,运算,输出,验证
-
通过循环
彰显人类智慧
经典防负数化模运算:
(这里使用了 \% 而非 \mod {} 是为了避免式子又臭又长)
- 加法:
- 减法:
- 乘法:
加减法的取模非常的慢,尽量少在加减中用%运算。虽然优化比较简单,但是在该用的时候也不可避免。
- 小震不用逃,大震逃不了
所以对于上述相对于乘法而言,可以看淡点(但是还是要重视)。
——而乘法则可能会溢出。
- 需要一些方法使得在运算乘法的时候不溢出
方法1
快速幂打临时工:仍然快速龟速乘法
利用性质:
- 快速幂模板改造
流程:
- 快速幂模板改造
时间复杂度:
适用范围:
-
用一些玄学乘法也不行的时候
-
急需数据稳定性
优点:
-
时、空、数据稳定性极强
-
真正意义上的万能模乘
缺点:
-
慢就是慢,时间稳在非常慢的地步。
-
容易敲错模板(ans的初始值为0不是1)
方法2
神秘乘法:
利用性质:
- 一个没有学过的高级知识点——MSK
流程:
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;
}
- 其中的int可以换成各个类型的变量。
适用范围:
-
m \le {LONG\_MAX^{\frac{2}{3}}}
时间复杂度:
优点:
- 复杂度感人(是真的感人!)
缺点:
方法3
玄学乘法
利用性质:
-
LONG_{MAX} = 9223372036854775807 -
LONG_{MIN} = -9223372036854775808
流程:
#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
}
-
把数据压入long double中
-
然后
玄学算 -
会溢出,但是溢出只会兜几圈,然后溢出之后的数据刚好等于正确答案
-
只能是long long类型!!!否则溢出的时候就
逝世不好说了
适用范围:
时间复杂度:同样是真正感人的
优点:
- 适用范围广,不怕数据大,
玄学溢出会给出答案
缺点:
- 只能使用 long long 变量类型
方法4
__int128
优点:
-
同样无脑
-
时间复杂度
居然也是O(1)
缺点:
-
手写快读快输才能输入输出
-
两个long long的内存,当
#define int __int128的时候需要注意MLE事故 -
常数有可能
免费大
乘法讲完了,那么除法呢?
乘法逆元存在条件:
乘法逆元的常用求法:
-
1 费马-欧拉定理 + 快速幂
-
a^{-1}\times b \equiv a^{m-2}\times b\pmod{m}
-
-
2 exgcd求逆元
- 板子:Chapter IV 第二个
-
3 线性求逆
- 板子:Chapter IV 第一个
费马-欧拉定理
(又称欧拉定理)
- 众所周知,费马小定理为
用决心提取机提取费马的灵魂,再让欧拉吸收这个灵魂,让他再次发现费马小定理,得到
由这个定理可以得到
-
a^{-1} = a^{p-2}$(求逆元方法1的原理)或者 $a^{-1} = a^{\varphi_m-1}
证明费马欧拉定理略。
费马小定理的另外一种形式:
- 优势是不需要
a,p 互质,只需要p 为质数即可。
Chapter IV 幂塔
当
a^b \equiv a^{b\mod \varphi_m + \varphi_m}\mod m
- 一个更加lip的定理
如果我们设
\varphi_{\varphi_{\dots_{\varphi_n}}}
(套 恶俗玄学欧拉函数)
为
则当