一、题目描述:
给定
数据范围:
二、解题思路:
这个题绝对有必要写一篇题解。
首先就是题目中的式子的转化。
一个式子如果含有未知的要进行函数操作的数,便是难以化简的。
发现题目保证了
于是转化为求
好,开始愉快地推式子吧!
推个式子给我人推麻了
现在可以做了,时间复杂度
三、完整代码:
1 #include<iostream> 2 #define N 50010 3 #define lim 50000 4 #define ll long long 5 using namespace std; 6 int n,cnt; 7 ll ans,g[N],c[N]; 8 int p[N],f[N],mu[N],vis[N]; 9 void pre_work() 10 { 11 mu[1]=1; 12 for(int i=2;i<=lim;i++) 13 { 14 if(!vis[i]) p[++cnt]=i,mu[i]=-1; 15 for(int j=1;j<=cnt&&p[j]*i<=lim;j++) 16 { 17 vis[i*p[j]]=1; 18 if(i%p[j]==0) break; 19 mu[i*p[j]]=-mu[i]; 20 } 21 } 22 for(int i=1;i<=lim;i++) 23 f[i]=mu[i]*i; 24 for(int i=1;i<=lim;i++) 25 for(int j=i;j<=lim;j+=i) 26 g[j]+=f[i]; 27 } 28 ll s(int m,int d) 29 { 30 ll res=0; 31 for(int i=1;i<=m;i++) 32 res+=i*c[i*d]; 33 return res*res; 34 } 35 int main() 36 { 37 cin>>n;pre_work(); 38 for(int i=1,x;i<=n;i++) 39 cin>>x,c[x]++; 40 for(int i=1;i<=lim;i++) 41 ans+=g[i]*i*s(lim/i,i); 42 cout<<ans<<'\n'; 43 return 0; 44 }
四、写题心得:
气死,推的式子比代码还长呜呜呜。收获经验如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】