由于太菜了没听懂,就去学了下用狄利克雷生成函数(DGF)的奇怪做法。
推导过程很繁琐,但个人感觉比min25筛好懂
以P5325为例,考虑求积性函数∀p∈Prime f(pk)=pk(pk−1)的前缀和
前置知识:狄利克雷生成函数
DGF{fi}=∞∑i=1fiix
那么显然黎曼函数就是1的DGF:
ζ(x)=∞∑i=11ix
常见数论函数的狄利克雷生成函数都可以自己手推,在这里给出一个欧拉函数的DGF来演示常规推导思路:
DGF{φ} (x)=∞∑i=0φ(i)ix
由于欧拉函数的积性,考虑枚举质数:
=∏p∈Prime∞∑i=0φ(pi)pix
=∏p∈Prime(1+∞∑i=1φ(pi)pix)
=∏p∈Prime(1+∞∑i=1pi−ix−∞∑i=1pi−ix−1)
=∏p∈Prime(1+∞∑i=1pi(1−x)−1p∞∑i=1pi(1−x))
=∏p∈Prime(1+p1−x1−p1−x−p−x1−p1−x)
=∏p∈Prime1−p−x1−p1−x
=∏p∈Prime1−p−x1−p1−x
我们又有:
ζ(x)=∞∑i=11ix=∏p∈Prime∞∑i=01pix=∏p∈Prime11−p−x
所以原式为:
=∏p∈Prime1ζ(x)1ζ(x−1)=∏p∈Primeζ(x−1)ζ(x)
其实求DGF并不需要在每个值上都有显性的式子,只要f(pk)有定义且为积性函数就,那么它的DGF就为:
∏p∈Prime∞∑i=0f(pi)pix
关于这个DGF,还有一个重要性质:
设⊗表示狄利克雷卷积,则
DGF{f} ⋅DGF{g}=DGF{f⊗g}
证明很显然:
DGF{f} ⋅DGF{g}=∞∑i=1f(i)ix⋅∞∑i=1g(i)ix=∞∑i=1∑d|if(d)g(id)ix=DGF{f⊗g}
好了可以看题目了。在此会跳过一些冗杂步骤而只写出一些关键步骤。
先考虑求出f的DGF:
∞∑i=1f(i)ix
=∏p∈Prime∞∑i=0f(pi)pix
=∏p∈Prime(1+∞∑i=1pi(pi−1)pix)
=∏p∈Prime(1+∞∑i=1pi(2−x)−∞∑i=1pi(1−x)))
=∏p∈Prime(1+p2−x1−p2−x−p(1−x)1−p1−x)
里面的式子瞎化简完:
=∏p∈Primep3−2x−2p1−x+1(1−p2−x)(1−p1−x)
仔细观察,分母实际上是1ζ(x−2)ζ(x−1)
所以原式为:
=ζ(x−2)ζ(x−1)⋅∏p∈Primep3−2x−2p1−x+1
我们左边看起来是个很清爽的式子,但右边很麻烦。我们DGF一般要弄成:
∏p∈Prime(1+∞∑i=2f(pi)pix)
的形式。
右边那一坨,刚才手动展开了化简过程的应该可以看出来:
=ζ(x−2)ζ(x−1)⋅∏p∈Prime(1−p1−x)2+p2(1−x)+1−p2(1−x)
为了得到常数1,我们在里面除一个(1−p1−x)2,相当于在外面乘了(1−p1−x)2,式子变成:
=ζ(x−2)ζ(x−1)⋅∏p∈Prime1+p2(1−x)+1−p2(1−x)(1−p1−x)2
把分式拆开,发现:
=ζ(x−2)ζ(x−1)⋅∏p∈Prime(1+∞∑i=2(i−1)(pi(1−x)+1−(i−1)pi(1−x)))
=ζ(x−2)ζ(x−1)⋅∏p∈Prime(1+∞∑i=2(i−1)(pi+1−pi)pix)
有什么用呢???
我们之前有性质,两函数DGF的乘积为两函数狄利克雷卷积的DGF。
令:
DGF{g} (x)=ζ(x−2)ζ(x−1),DGF{h} (x)=∏p∈Prime(1+∞∑i=2(i−1)(pi+1−pi)pix)
那么f=g⊗h,则:
n∑i=1f(i)=n∑i=1∑d|ig(d)h(id)
=n∑d=1h(d)∑d|ig(id)=n∑d=1h(d)⌊nd⌋∑i=1g(i)
我们观察上面的DGF,显然可以得到h(pi)=(i−1)(pi+1−pi),且f(p)=0
所以h(x)不为0的x必定是个Powerful Number,即每个质因子的次数都大于2.可以证明它的个数不超过√n,我们可以打出质数表搜索,关键在求∑⌊nd⌋i=1g(i)上。直接做很难搞。
考虑当p∈Prime时:
f(p)=p(p−1)=g(1)h(p)⋅h(1)g(p)=g(p)
所以g(p)=p(p−1),同时他的DGF长的也很像φ的DGF,我们可以猜测g(x)=xφ(x),然后把它的DGF求出来发现是对的。而他的前缀和我们可以杜教筛。
这样就做完了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App