GCD SUM

似乎很有趣的一道题目

题目要求的是

i=1ni=1ngcd(i,j)

假设我们有一个函数(借用了一下等于等于符号)

f(k)=i=1ni=1ngcd(i,j)==k

那么我们就要求

i=1nf(i)×i

假如对于i,有函数g(i)

g(k)=i=1ni=1ngcd(i,j)%k==0

显然会有:

g(k)=i=1mkf(i×k)

即是

f(i)=g(k)i=2mkf(i×k)

g(i)是可以求的,因为当两个数gcd可以整除i,当且仅当两个数都除的尽i。而总共有:

mi

个数可以除的尽i,所以运用一下排列组合的知识得到

g(i)=mi×mi=mi2

然后就可以从大到小线性求解了。

#include<cstdio>
//#define zczc
#define int long long
const int N=1000100;
inline void read(int &wh){
    wh=0;int f=1;char w=getchar();
    while(w<'0'||w>'9'){if(w=='-')f=-1;w=getchar();}
    while(w<='9'&&w>='0'){wh=wh*10+w-'0';w=getchar();}
    wh*=f;return;
}

int m,ans,f[N];

signed main(){
	
	#ifdef zczc
	freopen("in.txt","r",stdin);
	#endif
	
	read(m);
	for(int i=m;i;i--){
		f[i]=m/i*(m/i);
		for(int j=i*2;j<=m;j+=i)f[i]-=f[j];
		ans+=f[i]*i;
	}
	printf("%lld",ans);
	
	return 0;
}
posted @   Feyn618  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示