一节英语课,口胡一个筛子

\(O(\frac {n^{\frac 3 4}} {\log n})\) 的时间内求出一个积性函数的 块筛,要求 在质数处的值为项数不多的多项式,质数幂处的计算方法只要不是太慢都可以接受

灵感来源:这个帖子,以及与@wkywkywky 的聊天记录:





于是依照这个思路,我给你一个积性函数 \(f(p^k)\),考虑杜教筛。

假设我配对的是 \(g\),并且有 \(f * g = h\)

考虑构造一个 \(g\),使 \(h\) 在质数处的值为 \(0\),这样一来有值的位置就都是 PN 了。而这样的 \(g\) 很容易构造,容易知道 \(g(p)=-f(p)\)

然后继续构造使得 \(g(p^k)=0\)\(k \geq 2\))。

于是 \(h\) 只在质数处有值,在每次杜教筛时使用爆搜的复杂度是对的(甚至可以开一个数组二分来做到 \(O(\sqrt n)-O(\log n)\)),接下来考虑如何计算 \(g\) 的前缀和。

考虑类似 min25 筛的 DP。

我们令最开始时,不大于 \(\sqrt n\)\(g(p)=1\),其他 \(g(p)=-f(p)\)

于是先跑一遍质数前缀和求出 \(f\) 的前缀和。

然后我们从小到大枚举不大于 \(\sqrt n\) 的质数,然后让 \(g(p)=-f(p)\),也就是令 \(g(p)-=f(p)+1\),然后暴力枚举来更新,大概就是:

\[g[n][k]=g[n][k-1]+(f(p)+1) \times g[\lfloor \frac n {pri_k} \rfloor][k-1] \]

初值为 \(g[n][0]=-\sum_{p \leq n}f(p)\)

于是做到了 \(O(\frac {n^{\frac 3 4}}{\log n})\)

不过翻了一下 cmd 的博客,感觉这玩意儿早就被提出来了。。。

以及,应该是很容易优化到 \(O(n^{\frac 2 3})\) 的。

posted @ 2022-01-10 15:06  Prean  阅读(38)  评论(0编辑  收藏  举报
var canShowAdsense=function(){return !!0};