数论函数
取整函数
定义
对于实数 \(x\),记 \(⌊x⌋\) 为不超过 \(x\) 的最大整数。
\(\lfloor x \rfloor\) 也是满足如下关系的唯一整数:
\(\lfloor x \rfloor ≤x<\lfloor x \rfloor+1\)
对于正整数 \(n\),\(1\) 到 \(n\) 中 \(d\) 的倍数有 \(⌊\frac{n}{d}⌋\) 个
性质1
对于任意的 \(x\) 与正整数 \(a\),\(b\),我们均有:
\[ ⌊⌊\frac{x}{a}⌋/b⌋ = ⌊\frac{x}{ab}⌋ \]
性质2
\(⌊\frac{n}{d}⌋\) 可能的取值不超过 2√n 种。
证明
对于正整数 \(n\),考虑当 \(1≤d≤n\) 时,\(⌊\frac{n}{d}⌋\) 的不同的取值个数。
若 \(d≤\sqrt n\),则能得到的 \(⌊\frac{n}{d}⌋\) 只有不超过 \(\sqrt n\) 种。
若 \(d>\sqrt n\),则 \(⌊\frac{n}{d}⌋≤\frac{n}{d}<\sqrt n\),又因为 \(⌊\frac{n}{d}⌋\)是正整数,故此时
可能的取值也不超过 \(\sqrt n\) 种。
综上,\(⌊\frac{n}{d}⌋\) 可能的取值不超过 \(2\sqrt n\) 种。
调和数
\[ \begin{align} &H_{n}=\sum_{k=1}^{n}\frac{1}{k}\\ &=\ln n+\gamma+o(1) \end{align} \]
可以推出:
\[ \begin{align} \sum_{d=1}^{n}\lfloor \frac{n}{d} \rfloor=\Theta(n logn) \end{align} \]
素数计数函数
定义&素数定理
令素数计数函数 \(\pi(n)\) 表示不超过 \(n\) 的素数个数。我们有如下的素数定理:
\[ \pi(n)\sim\frac{n}{\ln n} \]
推论:
\(n\) 附近的素数密度近似是 \(\frac{1}{\ln n}\) 。
第 \(n\) 个素数 \(p_{n}\sim n \ln n\) 。
积性函数
定义
设 \(f\) 是数论函数,若对任意互质的正整数 \(a, b\) ,都有 \(f(ab) = f(a)f(b)\) ,则称 $f $ 是积性函数。
若对任意的正整数 \(a, b\) ,都有 \(f(ab) = f(a)f(b)\) ,则称 $ f $ 是完全积性的。
单位函数
定义
单位函数 \(\epsilon (n)\) 定义为:
\[ \begin{align} \epsilon(n)=[n=1]=\left\{ \begin{matrix} &1,n=1;\\ &0,n\neq1. \end{matrix}\right. \end{align} \]
除数函数
定义
除数函数 \(\sigma_{k}\) 用来表示 \(n\) 的因子的 \(k\) 次方之和:
\[ \begin{align} \sigma_{k}(n)=\sum_{d|n}d^{k} \end{align} \]
约数个数 \(\sigma_{0}(n)\) 常记为 \(d(n)\) ,约数和 \(\sigma_{1}(n)\) 常记为 \(\sigma(n)\) 。
除数函数都是积性函数。
\(Euler\) 函数
定义:
\(Euler\) 函数 \(φ(n)\) 表示不超过 \(n\) 且与 \(n\) 互质的正整数的个数。
由 \(n\) 的标准分解并结合容斥原理,我们可以得到 \(Euler\) 函数的表达式:\[\varphi(n)=n\cdot\prod_{i=1}^{s}(1-\frac{1}{p_{i}})\]
其中 \(n = p_{1}^{\alpha_1}p_{2}^{\alpha_2} · · · p_{s}^{\alpha_s}\) 是 \(n\) 的标准分解。
由此易见 \(Euler\) 函数是积性函数。
性质1
对于任意 $ n\(,\)Euler$ 函数有如下性质:
\[n=\sum_{d|n}\varphi(d)\]
证明1
将 \(1\) 到 \(n\) 中的所有整数按与 \(n\) 的最大公约数分类。
若 \(gcd(n, i) = d\),那么 \(gcd(\frac{n}{d} , \frac{i}{d} ) = 1\) 。而又 \(\frac{i}{d}\) 是不超过 \(\frac{n}{d}\) 的整数,故这样的 \(i\) 有 \(φ(\frac{n}{d})\) 个。
考虑所有 \(d | n\),我们也就考虑到了所有 \(1\) 到 \(n\) 之间的 \(n\) 个整数,因此有\[n=\sum_{d|n}\varphi(\frac{n}{d})=\sum_{d|n}\varphi(d)\]即:
\[ Id=\varphi *1 \]
证明2
可以先证明 \(f(n)=\sum_{d|n}\varphi (d)\) 为积性函数,然后再证对于质数 \(p\),有
\[ f(p^c)=\sum_{d|p^c}\varphi(d)=\varphi(1)+\varphi(p)+\varphi(p^2)+...+\varphi(p^{c-1})=p^c \]
可以通过定义与等比数列求和得出,然后结论易得
小技巧,研究一个积性函数,先研究其在质数的幂时的表现。
性质2
\(p|n\) ,则 \(\varphi(np)=\varphi(n)p\)。
使用时有:
\(\varphi(p^k)=(p-1)p^{(k-1)}\)
代码中:
phi[t]=phi[i]*(i%p[j]?p[j]-1:p[j]);
\(Mobius\) 函数
莫比乌斯函数的定义:
\[ \mu(n)= \begin{aligned} &1 && n=1 \\ &0 && 有完全平方因子 \\ &(-1)^p && 是p个不同素因子积\\ \end{aligned} \]
第一次看到这个时我很懵逼,感觉这个函数不那么自然,不知道为什么有这个函数……
但实际上,它是常函数 \(1\) 的逆,即 $\mu * 1=\epsilon $。
而具体推导可以看这里。(其实好像算是一种容斥?)
而这满足了进行莫比乌斯反演的需要。
积性函数的逆:
若 \(f*g=\epsilon\),则 \(f\) 与 \(g\) 互逆。
莫比乌斯反演
现有关系:
\[ \begin{align} F(n)=\sum_{d|n}f(d) \end{align} \]
即:
\[ F=f*1 \]
如果我们易求 \(f\),那么就可以轻松求出 \(F\),反之,若 \(F\) 易求,我们如何求出 \(f\)?
\[ F*\mu=f*1*\mu=f*\epsilon=f \]
倍数的莫比乌斯反演:
若:
\[ F(n)=\sum_{n|d}f(d) \]
则:
\[ f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d) \]
又作:
若:
\[ F(n)=\sum_{k=1}^{\infty}f(kn) \]
则:
\[ f(n)=\sum_{k=1}^{\infty}\mu(k)f(kn) \]
起初我对这式子不是很理解,觉得不是有 \(\infty\) 项吗,怎么算?
但实际上在我们的运用过程中 \(f(d)\) 通常都是有限项的,如\(f(d)=\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=d]\),而这种形式好像也更常用
技巧:
\[ [gcd(i,j)=1]=\sum_{d|gcd(i,j)}\mu(d) \]
证明:
由 \(\mu * 1=\epsilon\),
即 \(\sum_{d|n}\mu(d)=[n=1]\),
将 \(n\) 替换成 \(gcd(i,j)\) 就是上式了。
然后 \(d|gcd(x,y)\) 可以转化为 \(d|x,d|y\),然后可以枚举倍数来求,
然后经常可以枚举 \(d\) 来根据 \(i\),\(j\) 的贡献来分块求答案。
主要思想:
使用“交换合式顺序”和“改变枚举变量”来化简。
常见反演:
设 \(f(d)=\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=d]\)。
\[ \begin{align} F(x)&=\sum_{x|d}f(d)\\ &=\sum_{x|d}\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=d]\\ &=\sum_{x|d}\sum_{i=1}^{n}\sum_{j=1}^{m}[x|i,x|j]\\ &=\lfloor \frac{n}{x} \rfloor \lfloor \frac{m}{x} \rfloor \end{align} \]
则 \(F(x)\) 易求,那么就可以反演求 \(f(d)\) 了。(当然除以 \(d\) 在利用上面的 \(gcd\) 变换的技巧也可以得到)
当然,这类题有些也可以用 \(\varphi\) 来化简,利用 \(\varphi*1=id\) 的性质,将 \(gcd\) 代换成 \(n\) 就行了。
\(\varphi\) 与 \(\mu\) 的关系:
\[ \begin{align} &Id=\varphi *1\\ &Id*\mu =\varphi\\ &\varphi(n)=\sum_{d|n}\mu(d)\frac{n}{d}\\ &\frac{\varphi(n)}{n}=\sum_{d|n}\frac{\mu(d)}{d} \end{align} \]
关于 \(d(n)\) 的有力结论:
\[ d(nm)=\sum_{i|n}\sum_{j|m}[gcd(i,j)==1] \]
证明:
设 \(nm=\prod p_i^{x_i}\),\(n=\prod p_i^{y_i}\),则 \(m=\prod p_i^{x_i-y_i}\)。
设 \(i = p_1^{a_1}\cdot p_2^{a_2}\cdot p_3^{a_3}\cdots p_k^{a_k}\),\(j = p_1^{b_1}\cdot p_2^{b_2}\cdot p_3^{b_3}\cdots p_k^{b_k}\)。
若 \(gcd(i,j)==1\),则若 \(a_i=0\),则 \(b_i\) 有 \(x_i-y_i+1\) 种取值,若 \(b_i=0\),则 \(a_i\) 有 \(y_i+1\) 种取值,\(a_i=b_i=0\) 的情况重复了,所以一共有 \(x_i+1\) 种取值。
故右式的值为 \(\prod x_i+1\)。而这与左式的形式一致。
orz Sengxian 学长(看了一圈就他的一眼看懂了。。)。
数论分块
具体就不写了,简要记录证明思路,算了,也不写了。