杜教筛

杜教筛

又在抄 oi-wiki...

ϕ(n)=inφ(i)

利用 id=φ1

12n(n+1)=knk=knd|kφ(kd)=dn1kn,d|kφ(kd)=dnkndφ(k)=dnϕ(nd)

注意到当 d=1 的时候就是我们想要的 ϕ(n)

即:ϕ(n)=12n(n+1)d2ϕ(nd)

记忆化搜索即可,可证算法复杂度为 O(n2/3).

一般化

欲求 f 的前缀和 F,构造出 F(n) 关于 F(nd) 的递推式。

id|ig(d)f(id)=ig(i)F(ni)i(fg)(i)=g(1)F(n)+i>1g(i)F(ni)

若能快速求得 fg 的前缀和以及 g,则可以整除分块来求 F(n).

试试看!

i=1nμ(i) 的值,其中 n2311.

利用 μ1=ϵ 即可。

posted @   do_while_true  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?

This blog has running: 1845 days 1 hours 33 minutes 19 seconds

点击右上角即可分享
微信分享提示