前置知识
积性函数
指对于一个函数 \(f\),如果 \(f(ab)=f(a)f(b)\ a \bot b\),那么 \(f\) 就是积性函数
如果没有 \(a \bot b\) 的限制条件 \(f(ab)=f(a)f(b)\) 仍然成立,那么 \(f\) 就是完全积性函数
狄利克雷卷积
对于两个数论函数 \(f,g\),它们的狄利克雷卷积为:
\[f*g(n)=\sum_{d | n}f(d)g(\frac nd)
\]
性质:对于两个积性函数 \(f,g\),它们的狄利克雷卷积也是积性函数
证明:设 \(f,g\) 为积性函数,\(h\) 为\(f,g\) 的狄利克雷卷积,\(n,m\in\mathbb{Z}\) 且 \(n \bot m\)
\[\begin{aligned}
h(n)h(m) &= \sum_{a | n}f(a)g(\frac{n}{a})\sum_{b | m} f(b)g(\frac{m}{b})\\
&= \sum_{a | n}\sum_{b | m}f(a)f(b)g(\frac{n}{a})g(\frac{m}{b})
\end{aligned}
\]
由 \(n \bot m\) 可知 \(\forall a|n,\forall b|m,a \bot b\),所以:
\[h(n)h(m)=\sum_{a | n,b | m}f(ab)g(\frac{mn}{ab})
\]
由 \(a \bot b\) 可知 \(\{a:a|n\}\cup\{b:b|m\}=\{d:d|nm\}\),所以:
\[h(n)h(m)=\sum_{d|nm}f(d)g(\frac{nm}{d})=h(nm)
\]
数论分块
数论分块,也叫整除分块,用处是将一类 \(\sum_{i=1}^n\lfloor\frac ni\rfloor\) 的式子计算所需复杂度由 \(O(n)\) 降至 \(O(\sqrt n)\)
很简单,考虑向下取整时,对与一些 \(i\),\(\lfloor\frac ni\rfloor\) 的值可能相同,那么只要将这些相同的一起处理,就可以减少复杂度。
\(\sum_{i=1}^n\lfloor\frac ni\rfloor\) 数论分块代码:
for (int i = 1, j; i <= n; i = j + 1) {
j = n / (n / i);
ans += (n / i) * (j - i + 1);
}