P5325-[模板]Min_25筛
1|0正题
题目链接:https://www.luogu.com.cn/problem/P5325
1|1题目大意
定义一个积性函数满足
求
1|2解题思路
首先我们可以把是质数的情况拆成一个阶的多项式。
然后就是筛了。我们先需要求出质数有关的答案,考虑把这个多项式的多个阶分开来求。
有关质数的求法,我们定义数组
(上面表示质数集,表示的最小质因子,表示的第个质因子,表示多项式的某个阶,后面为了方便写作,后文中的中的都与输入的无关,只是一个变量)
具体的说就是如果是质数或者最小质因子超过,那当某个最接近但小于时,就是我们需要的答案了。
因为一个合数满足,所以的数量级很小,可以利用这个性质。
递推这个数组时对于每次往上加相当于多加上了一些限制条件,也就是相对于我们需要减去一些多余的答案。
这些多余的答案就是最小质因数是的数,这些数就是。
表示枚举一个乘上之后不会超过且最小质因子超过的数,这些数乘上后就是不重不漏的表示最小质因子是的数,因为是一个完全积性函数,所以可以直接乘上一个。
现在我们就有递推式
快速处理然后递推,可以注意到就是前个质数的次方和,因为数量级只有所以可以直接预处理,因为后面还要用就定义
还有发现无论如何每个的取值都只与有关,所以我们对于数组的每一个都只有个连续的范围内的同一取值。所以我们可以直接整除分块来大大缩减数量级的空间和时间。
给出一个如何快速得到的储存地址?一个比较巧妙的方法是如果那么表示的储存位置,否则用表示的储存地址。
然后那个维度我们只需要用到(表示以内的质数数量)值,所以我们直接滚动来递推就好了。
现在我们知道了所有的,这道题的话具体的值就是就可以表示前缀质数的函数和了。下面简写。
然后就是要求答案了,同样使用的技巧,设
然后对于的答案我们可以分为质数和非质数两部分,质数部分显然就是(不记得的去看前面定义)。
然后合数部分我们考虑递归下去处理就是。是枚举质因子就不多说了,那个是因为已经作为质数被计算过了,但是后面的还没有。
现在就有的递推式了
递归下去做就好了,说是不知道因为啥定理所以是不用记忆化的。
一个细节就是最好不要统计进去,最好加上就好了
据说时间复杂度是的,反正这题我没开的话只跑了七百多毫秒。
1|3code
__EOF__

本文链接:https://www.cnblogs.com/QuantAsk/p/14284015.html
关于博主:退役OIer,GD划水选手
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个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吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构