1 < x,y < n 且 (x,y)=p
==> 看到互质(统计互质的对数)——欧拉函数
所以p不同时,互质的对数也不同
#include<bits/stdc++.h> using namespace std; #define ll long long int const N=1e7+7; int n,cnt; int phi[N],p[N]; ll a[N]; bool v[N]; int main(){ phi[1]=1;a[1]=1; cin >> n; for(register int i=2;i<=n;++i){ if(v[i]==0){ p[++cnt]=i; phi[i]=i-1; } for(register int j=1;j<=cnt&&p[j]*i<=n;++j){ v[ p[j]*i ]=1; if(i%p[j]==0){ phi[ p[j]*i ]=phi[i]*p[j]; break; } else phi[ p[j]*i ]=phi[i]*(p[j]-1); } a[i]=a[i-1]+phi[i]; //对phi做前缀和,表示左边相对固定,x以内的互质对数 } ll ans=0; for(int i=1;i<=cnt&&p[i]<=n;++i){ ans+=(a[n/p[i]])*2-1; //*2表示左右可以互换,-1表示(p,p)=p这种只能算一种 } cout << ans; return 0; }