从头开始学数论(2)
前置芝士
欧拉函数
欧拉函数相关
积性函数
对于互质的 a,b 和一个函数, 如果有 f(a×b)=f(a)×f(b) 就称这个函数是一个积性函数。
完全积性函数
对于任意的 a,b 和一个函数, 如果有 f(a×b)=f(a)×f(b) 就称这个函数是一个完全积性函数。
常见函数
- ϵ(x)={1x=10x≠1 ,它是完全积性函数。
- Idk(x)=xk ,它是完全积性函数( k 省略时默认为 1 )。
- σk(x)=∑d|ndk ,它是积性函数( k 省略时默认为 1 )。
- μ(x)=⎧⎪
⎪
⎪⎨⎪
⎪
⎪⎩1x=1(−1)kx=k∏i=1pi (pi为互异质数)0otherwise
从Dirichlet卷积到莫比乌斯函数
Dirichlet卷积
定义
定义 2 个数论函数 f,p,如果有 h(x)=∑d|xf(d)p(xd),就称函数 h 是函数 f 和函数 p 的卷积,记为 h=f∗p。可以读作 f 卷 p。
这里的 "∗" 是卷积的符号。
卷积也可以这样表示 h(n)=(f∗g)(n)=∑xy=nf(x)p(y)
性质
- 交换律: f∗p=p∗f
证明:
f∗p=∑d|nf(d)p(nd)=∑d|nf(nd)p(d)=p∗f
- 结合律: (f∗p)∗h=f∗(p∗h)
证明:
((f∗p)∗h)(a)=∑x×y×z=a(f(x)×p(y))×h(z)=∑x×y×z=af(x)×(p(y)×h(z))=((f∗p)∗h)(a)
- 分配律: f∗(x+p)=f∗x+f∗p
证明
显然
- ϵ∗f=f∗ϵ=f
证明:
显然
- 如果 f 和 g 都是积性函数那么 f∗g都是积性函数。
证明:
设 h=f∗g, f,g 都是积性函数。
设 a,b 互质。
于是有 h(a)=∑d1|af(d1)g(ad1), h(b)=∑d2|bf(d2)g(bd2)
乘起来可以得到
h(a)×h(b)=∑d1|af(d1)g(ad1)×∑d2|bf(d2)g(bd2) =∑d1|a,d2|bf(d1×d2)g(abd1×d2)
因为 a,b 互质, 所以d1×d2 是唯一的,所以原式可以化为 ∑d1|a,d2|bf(d)g(abd) 就是 h(ab) 即 (f∗g)(a)×(f∗g)(b)=(f∗g)(ab)
逆元
定义
如果数论函数f有, f(1)≠0, 若 f∗g=ϵ, 就称
g 是 f 的 dirichlet 逆元,记作 f−1 。
组合数学的美
LUCAS定理
没有什么好说的。
Cnm=Cn mod pm mod p×Cn/pm/p
代码用递归实现
| inline i64 lucas(i64 n, i64 m) { |
| return m == 0 ? 1 : |
| (c(n % p, m % p) * lucas(n / p, m / p) % p); |
| } |
二项式定理
(a+b)1=1a+1b(a+b)2=1a2+2ab+1b2(a+b)3=1a3+3a2b+3ab2+1b3
提出系数得到
1,11,2,11,3,3,1
显而易见,杨辉三角。
由此得到二项式定理:(a+b)n=∑ni=1Cin×ai×bn−i。
通过组合数学的角度思考。
在展开 (x+y)×(x+y)×(x+y)…(x+y) 的过程中,要么选 x 要么选 y, 所以 xi×yn−i的系数为 Cin。
递推求错放数量
设 fi 是满足 ai 不在第 i 位的排列方案。
a. 假设第 n 个数不在第 n 位, 假设放在第 k 位,一共有 n 位, 所以有 n−1 种方案。
b. 考虑第 k 位的数,它有两种情况:
- 把这个数放到第 n 位去,于是这两个数就安排好了, 现在还有 n−2 个数需要错排,方案数就是 fn−2
- 把这个数不放到第 n 位去,于是只有第 n 位安排好了,还有 n−1 个数需要错排,方案数就是 fn−1
对于 a,b 操作是先有 a 再有 b,满足乘法原理
对于 b 的两个操作则是两种情况,只能选一种, 满足加法原理,所以错排的递推式如下:
fi=(i−1)×(fi−1+fi−2)
容斥原理
<- 文氏图 / 韦恩图 / veen 图
一些关于集合的基本知识
并集: A∪B=D, 两个集合的公共部分。
交集: A∩B=A+B−D, 两个集合所有的部分减去它们重叠的部分。
显然, 对于上图 G=A+B+C−A∪B−B∪C−A∪C+A∪B∪C。
容斥原理公式
从上面求 G 部分的公式可以看出, 容斥原理就是加多了就减,减多了就加的思想。最后求所有部分的并。
使用数学语言描绘一下就是
|∪ni=1Si|=∑i|Si|−∑i<j|Si∩Sj|+∑i<j<k|Si∩Sj∩Sk|−⋯+(−1)m−1∑ai<ai+1|∩mi=1Sai|+⋯+(−1)n−1|S1∩⋯∩Sn|
嗯,有点复杂,可以更简洁一些。
|∪ni=1Si|=n∑m=1(−1)m−1∑ai<ai+1|∩mi=1Sai|
本文作者:Falling-flowers 的 blog
本文链接:https://www.cnblogs.com/falling-flowers/p/15874365.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步