题解 P3911 【最小公倍数之和】
ans=n∑i=1n∑j=1lcm(Ai,Aj)
ans=n∑i=1n∑j=1lcm(Ai,Aj)=n∑i=1n∑j=1Ai⋅Ajgcd(Ai,Aj)=n∑i=1n∑j=1Ai⋅AjAi∑t=11t[gcd(Ai,Aj)=t]=Am∑t=11tn∑i=1n∑j=1Ai⋅Aj[gcd(Ai,Aj)=t]=Am∑t=1tn∑i=1n∑j=1[Aimodt=0][Ajmodt=0]⋅Ai⋅Ajt2[gcd(Ai/t,Aj/t)=1]=Am∑t=1tn∑i=1n∑j=1[Aimodt=0][Ajmodt=0]⋅Ai⋅Ajt2∑d|gcd(Ai/t,Aj/t)μ(d)
打住,我们这些式子始终都在数组上进行,根本没有脱离数组,这导致我们根本没法进行数论变换
所以我们需要把数组转化到数上去
1≤N≤50000
1≤Ai≤50000
我们就可以根据这个式子
n∑i=1n∑j=1lcm(i,j)
我们想想怎么加一个限制才能使答案不重不漏
数量!
我们记录一个数字x在数列中出现了多少次,记为数组c
所以我们现在要求的是
ans=n∑i=1n∑j=1lcm(i,j)×ci×cj=n∑i=1n∑j=1i×j×ci×cjgcd
那么我们前面的可以进行预处理
时间复杂度
O(n\cdot ln(n))
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 如何打造一个高并发系统?
· 【译】我们最喜欢的2024年的 Visual Studio 新功能