题目直接不会做---》 推式子。
这类问题很通常的思路就是枚举约数或质因数。
\(\sum_{i=1}^{n} \gcd(i,n)\)
\(=\sum_{d|n} d \times \sum_{d|i} [\gcd(i/d,n/d)=1]\)
\(=\sum_{d|n} d \times \varphi(n/d)\)

Code

#include<cstdio>
#include<iostream>
#define rint register int
typedef long long LL;
using namespace std;
LL n;
LL varphi(LL x)
{
    LL i;
    LL res=x;
    for(i=2;i*i<=x;i++) {
        if(x%i==0) {
            while(x%i==0) x/=i;
            res=res/i*(i-1);
        }
    }
    if(x>1) res=res/x*(x-1);
    return res;
}

int main()
{
//	freopen("1.in","r",stdin);
    cin>>n;
    LL ans=0;
    for(LL i=1;i*i<=n;i++) {
        if(n%i==0) {
            ans+=i*varphi(n/i);
            if(i*i!=n)
                ans+=(n/i)*varphi(i);
    //        cout<<i<<endl;
        }
    }
    cout<<ans<<endl;
    return 0;
}

相关文章:

  • 2021-11-19
  • 2021-07-27
  • 2021-12-12
  • 2021-12-19
  • 2022-02-15
  • 2021-05-20
  • 2022-12-23
  • 2021-10-27
猜你喜欢
  • 2021-07-04
  • 2021-07-07
  • 2022-02-19
  • 2021-06-05
  • 2021-07-04
  • 2021-04-07
  • 2021-11-12
相关资源
相似解决方案