[SDOI2012] Longge的问题 - 欧拉函数

\(\sum\limits_{i=1}^{n}gcd(i,n)\)

Solution

化简为 \(\sum\limits_{i|n}^{n}φ(\dfrac{n}{i})i\)

筛出欧拉函数暴力求答案即可

#include <bits/stdc++.h>
using namespace std;
#define int long long
int phi(int n) {
    int m = floor(sqrt(n + 0.5)), ans = n;
    for (int i = 2; i <= m; i++) {
        if (n % i == 0) {
            ans = ans / i * (i - 1);
            while (n % i == 0) n /= i;
        }
    }
    if (n != 1) ans = ans / n * (n - 1);
    return ans;
}
signed main() {
    int n,ans=0;
    cin>>n;
    int lim=sqrt(n);
    for(int i=1;i<=lim;i++) if(n%i==0) {
        ans+=i*phi(n/i)+(i!=n/i)*n/i*phi(i);
    }
    cout<<ans;
}

猜你喜欢

转载自www.cnblogs.com/mollnn/p/12298729.html