由于太菜了没听懂,就去学了下用狄利克雷生成函数(DGF)的奇怪做法。
推导过程很繁琐,但个人感觉比min25筛好懂
以P5325为例,考虑求积性函数\(\forall p\in Prime\space f(p^k)=p^k(p^k-1)\)的前缀和
前置知识:狄利克雷生成函数
\[\text{DGF}\{f_i\}=\sum_{i=1}^{\infty}{f_i \over i^x}
\]
那么显然黎曼函数就是\(1\)的DGF:
\[\zeta(x)=\sum_{i=1}^\infty {1\over i^x}
\]
常见数论函数的狄利克雷生成函数都可以自己手推,在这里给出一个欧拉函数的DGF来演示常规推导思路:
\[\text{DGF}\{\varphi\}\space(x)=\sum_{i=0}^{\infty}{\varphi(i)\over i^x}
\]
由于欧拉函数的积性,考虑枚举质数:
\[=\prod_{p\in Prime}\sum_{i=0}^\infty {\varphi(p^i)\over p^{ix}}
\]
\[=\prod_{p\in Prime}(1+\sum_{i=1}^\infty {\varphi(p^i)\over p^{ix}})
\]
\[=\prod_{p\in Prime}(1+\sum_{i=1}^\infty {p^{i-ix}}-\sum_{i=1}^\infty {p^{i-ix-1}})
\]
\[=\prod_{p\in Prime}(1+\sum_{i=1}^\infty {p^{i(1-x)}}-{1\over p}\sum_{i=1}^\infty {p^{i(1-x)}})
\]
\[=\prod_{p\in Prime}(1+{p^{1-x}\over 1-p^{1-x}}-{p^{-x}\over{1-p^{1-x}}})
\]
\[=\prod_{p\in Prime}{1-p^{-x}\over 1-p^{1-x}}
\]
\[=\prod_{p\in Prime}{1-p^{-x}\over 1-p^{1-x}}
\]
我们又有:
\[\zeta(x)=\sum_{i=1}^\infty {1\over i^x}=\prod_{p\in Prime}\sum_{i=0}^\infty {1\over p^{ix}}=\prod_{p\in Prime}{1\over 1-p^{-x}}
\]
所以原式为:
\[=\prod_{p\in Prime}{{1\over \zeta(x)}\over{1\over \zeta(x-1)}}=\prod_{p\in Prime}{\zeta(x-1)\over\zeta(x)}
\]
其实求DGF并不需要在每个值上都有显性的式子,只要\(f(p^k)\)有定义且为积性函数就,那么它的DGF就为:
\[\prod_{p\in Prime}\sum_{i=0}^\infty {f(p^i)\over p^{ix}}
\]
关于这个DGF,还有一个重要性质:
设\(\otimes\)表示狄利克雷卷积,则
\[\text{DGF}\{f\}\space \cdot \text{DGF}\{g\}=\text{DGF}\{f\otimes g\}
\]
证明很显然:
\[\text{DGF}\{f\}\space \cdot \text{DGF}\{g\}=\sum_{i=1}^\infty {f(i)\over i^x} \cdot \sum_{i=1}^\infty {g(i)\over i^x}= \sum_{i=1}^\infty {\sum_{d|i}f(d)g({i\over d})\over i^x} = \text{DGF}\{f\otimes g\}
\]
好了可以看题目了。在此会跳过一些冗杂步骤而只写出一些关键步骤。
先考虑求出\(f\)的DGF:
\[\sum_{i=1}^\infty {f(i)\over i^x}
\]
\[=\prod_{p\in Prime}\sum_{i=0}^\infty {f(p^i)\over p^{ix}}
\]
\[=\prod_{p\in Prime}(1+\sum_{i=1}^\infty {p^i(p^i-1)\over p^{ix}})
\]
\[=\prod_{p\in Prime}(1+\sum_{i=1}^\infty p^{i(2-x)}-\sum_{i=1}^\infty p^{i(1-x)}))
\]
\[=\prod_{p\in Prime}(1+{p^{2-x}\over 1-p^{2-x}}-{p^{(1-x)}\over 1-p^{1-x}})
\]
里面的式子瞎化简完:
\[=\prod_{p\in Prime}{p^{3-2x}-2p^{1-x}+1\over(1-p^{2-x})(1-p^{1-x})}
\]
仔细观察,分母实际上是\(1\over\zeta(x-2)\zeta(x-1)\)
所以原式为:
\[=\zeta(x-2)\zeta(x-1)\cdot\prod_{p\in Prime}{p^{3-2x}-2p^{1-x}+1}
\]
我们左边看起来是个很清爽的式子,但右边很麻烦。我们DGF一般要弄成:
\[\prod_{p\in Prime}(1+\sum_{i=2}^\infty {f(p^i)\over p^{ix}})
\]
的形式。
右边那一坨,刚才手动展开了化简过程的应该可以看出来:
\[=\zeta(x-2)\zeta(x-1)\cdot\prod_{p\in Prime}{(1-p^{1-x})^2+p^{2(1-x)+1}-p^{2(1-x)}}
\]
为了得到常数1,我们在里面除一个\((1-p^{1-x})^2\),相当于在外面乘了\((1-p^{1-x})^2\),式子变成:
\[={\zeta(x-2)\over\zeta(x-1)}\cdot\prod_{p\in Prime}1+{p^{2(1-x)+1}-p^{2(1-x)} \over (1-p^{1-x})^2}
\]
把分式拆开,发现:
\[={\zeta(x-2)\over\zeta(x-1)}\cdot\prod_{p\in Prime}(1+\sum_{i=2}^\infty (i-1)(p^{i(1-x)+1}-(i-1)p^{i(1-x)}))
\]
\[={\zeta(x-2)\over\zeta(x-1)}\cdot\prod_{p\in Prime}(1+\sum_{i=2}^\infty {{(i-1)(p^{i+1}-p^i)}\over p^{ix}})
\]
有什么用呢???
我们之前有性质,两函数DGF的乘积为两函数狄利克雷卷积的DGF。
令:
\[\text{DGF}\{g\}\space(x)={\zeta(x-2)\over\zeta(x-1)},\text{DGF}\{h\}\space(x)=\prod_{p\in Prime}(1+\sum_{i=2}^\infty {{(i-1)(p^{i+1}-p^i)}\over p^{ix}})
\]
那么\(f=g\otimes h\),则:
\[\sum_{i=1}^n f(i)=\sum_{i=1}^n \sum_{d|i}g(d)h({i\over d})
\]
\[=\sum_{d=1}^n h(d)\sum_{d|i}g({i\over d})=\sum_{d=1}^n h(d)\sum_{i=1}^{\lfloor{n\over d}\rfloor} g(i)
\]
我们观察上面的DGF,显然可以得到\(h(p^i)=(i-1)(p^{i+1}-p^i)\),且\(f(p)=0\)
所以\(h(x)\)不为0的\(x\)必定是个Powerful Number,即每个质因子的次数都大于2.可以证明它的个数不超过\(\sqrt{n}\),我们可以打出质数表搜索,关键在求\(\sum_{i=1}^{\lfloor{n\over d}\rfloor} g(i)\)上。直接做很难搞。
考虑当\(p\in Prime\)时:
\[f(p)=p(p-1)=g(1)h(p)\cdot h(1)g(p)=g(p)
\]
所以\(g(p)=p(p-1)\),同时他的DGF长的也很像\(\varphi\)的DGF,我们可以猜测\(g(x)=x\varphi(x)\),然后把它的DGF求出来发现是对的。而他的前缀和我们可以杜教筛。
这样就做完了。