莫比乌斯反演的证明
[求证:[n==1]=sum_{d|n}mu(d)\
设n=prod_{i=1}^{k}p_i^{a_i} (pin exttt{Prime})\
若d的约数中某一个质数的指数不为1,则mu(d)为0~(莫比乌斯函数的定义)\
则d取值为1或prod_{i=1}^{k}p_i*b_i (forall b_iin[1,0])\
sum_{d|n}mu(d)=sum_{i=1}^{k}C(k,i)*(-1)^{k}+1~~~~~~(C为排列组合公式)\
=sum_{i=0}^{k}C(k,i)*(-1)^{i}\
(易知)在2le k这个式子值为0\
当k=0时即n=1时,式子为1\
Q.E.D.
]
还是解释下后面那个式子吧。
[当k为奇数时,根据组合公式的性质:C(n,i)=C(n,n-i)\
代入sum_{i=0}^{k}C(k,i)*(-1)^{i}\
=sum_{i=0}^{lfloor k/2
floor} C(k,i)*(-1)^i+C(k,k-i)*(-1)^{k-i}\
=sum_{i=0}^{lfloor k/2
floor} C(k,i)*(-1)^i+C(k,i)*(-1)^{k-i}\
显然i与k-i的奇偶性不同,式子为0\
当k为偶数时,有一点麻烦,就不用式子证明了\
因为每一个排列组合式子其实是杨辉三角中的一个数\
有C(n,m)=C(n-1,m)+C(n-1,m-1)\
将这个公式代入式子的每一项,最后会两两抵消,式子会变成0\
Q.E.D
]
欧拉反演的证明
[求证:n=sum_{d|n} varphi(d)\
设f(n)=sum_{d|n}varphi(d)\
设i,j~(gcd(i,j)==1)\
则f(ij)=sum_{d|ij}varphi(d)=(sum_{d|i}varphi(d)) imes(sum_{d|j}varphi(d))\
即f为积性函数,设pin exttt{prime}\
f(p^k)=sum_{d|p^k}varphi(d)=sum_{d=0}^{k}varphi(p^i)\
因为varphi是积性函数
则f(p^k)=1+sum_{i=0}^{k-1}p^i imes(p-1)\
由等比数列可得f(p^k)=p^{k}(p-1)/(p-1)=p^k\
则f(n)=prod_{i=1}^{k}f(p_i^{q_i})=prod_{i=1}^{k} p_i^{q_i}=n\
Q.E.D
]
Catalan数的相关证明
- 通项公式
[证:C_{2n}^{n}-C_{2n}^{n-1}=frac{1}{n+1}C_{2n}^{n}\
C_{2n}^{n}=frac{(2n)!}{n! imes n!}\
C_{2n}^{n-1}=frac{(2n)!}{(n-1)! imes (n+1)!}=frac{(2n)! imes frac{n}{n+1}}{n! imes n!}\
C_{2n}^{n}-C_{2n}^{n-1}=frac{n+1-n}{n+1} imes frac{(2n)!}{n! imes n!} =frac{1}{n+1}C_{2n}^{n}\
Q.E.D
]
- Catalan递推式
[证:f(n)=f(n-1) imes frac{4n-2}{n+1}\
f(n)=frac{C_{2n}^{n}}{n+1}=frac{(2n)!}{(n+1) imes n! imes n!}\
f(n-1)=frac{C_{2n-2}^{n-1}}{n}=frac{(2(n-1))!}{n imes (n-1)! imes (n-1)!}\
f(n)=f(n-1) imesfrac{(2n-1) imes 2n imes n}{n imes n imes (n+1)}\
f(n)=f(n-1) imes frac{4n-2}{n+1}\
Q.E.D
]
欧拉筛
- 筛质数(原理)
埃筛:
inline void init()
{
for (int i = 2; i <= N; i++)
{
if (!vis[i])
prime[++top] = i;
for (int j = 1; j <= top && i * prime[j] <= N; j++)
vis[i * prime[j]] = 1;
}
}
以下 (i,j)指的都是代码中的 (i,j) 。
埃筛应该都能理解,但是埃筛会对每个合数 (n) 筛 (k) (小于 (sqrt(n)) 的质数 (prime[j]) 的个数) 遍,于是在埃筛的基础上,我们要保证每个合数都被筛 (1) 遍。
我们钦定方法为每个合数都只被最小的质因子 (j) 筛到一遍。
因此,要保证最小的质因子是 (prime[j]) 而不是 (i) 中的质因子,即当 (prime[j]) 是 (i) 的约数时,(i) 中有质因子 (prime[j]) ,后面筛下去都是无意义了。
欧拉筛:
inline void init()
{
for (int i = 2; i <= N; i++)
{
if (!vis[i])
prime[++top] = i;
for (int j = 1; j <= top && i * prime[j] <= N; j++)
{
vis[i * prime[j]] = 1;
if(i % prime[j] == 0)
break;
}
}
}