求:
n∑i=1m∑j=1d(ij)
其中 d(n) 代表 n 的约数个数。
Sol#
考虑拆开 d(ij),平凡的想法是考虑 i 和 j 分别对 d(ij) 提供因子。
注意到若 i 能提供完因子 p,那么直接从 i 里取即可。
否则需要在 j 里取因子。
集中注意力,注意到从 j 里取因子,当且仅当 i 已经被取完了。
这句话看似是废话,但这告诉我们,取 j 的因子完全可以代表 i 的因子被取完。
考虑一种双射,取 i 表示取 i,取 j 表示先取完 i,然后再取 j。
因此我们保证了双射过后不会同时取 i 和 j。
也就是:
d(ij)=∑x|i∑y|j[gcd(i,j)=1]
后面的就很简单啦。
n∑i=1m∑j=1d(ij)=n∑i=1m∑j=1∑x|i sumy|j[gcd(i,j)=1]=n∑x=1m∑y=1[gcd(i,j)=1]⌊nx⌋⌊my⌋=n∑x=1m∑y=1⌊nx⌋⌊my⌋∑d|gcd(x,y)μ(d)=min(n,m)∑d=1μ(d)n∑x=1m∑y=1⌊nx⌋⌊ny⌋[d|x][d|y]=min(n,m)∑d=1μ(d)⌊nd⌋∑x=1⌊md⌋∑y=1⌊nxd⌋⌊myd⌋
令 f(n)=∑ni=1⌊ni⌋。
=min(n,m)∑d=1μ(d)f(nd)f(md)
预处理 f,直接整除分块即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具