定点共线条件可转换为gcd即一个互质对应一条边,即求欧拉函数(注意n==1的特殊情况)
#include<bits/stdc++.h> using namespace std; const int maxn=4e4+50;//1e9超126M int phi[maxn],pri[maxn]; bool ispri[maxn]; int n; void solve() { int cnt=0; memset(ispri,true,sizeof(ispri)); ispri[1]=0; phi[1]=1; for(int i=1;i<=n;++i) { if(ispri[i]) { pri[++cnt]=i; phi[i]=i-1; } for(int j=1;j<=cnt&&i*pri[j]<=n;++j) { ispri[i*pri[j]]=0; if(i%pri[j]) { phi[i*pri[j]]=phi[i]*phi[pri[j]]; } else { phi[i*pri[j]]=phi[i]*pri[j]; break; } } } } int main () { cin>>n; solve(); long long ans=0; for(int i=1;i<n;++i) { ans+=1ll*phi[i]; } ans*=2; if(n>1) { ans++; } cout<<ans; return 0; }