---恢复内容开始---
如果(x,y)!=1,必然被(x/gcd(x,y),y/gcd(x,y))挡住;所以就是对每个x求与它互质的数,有类似筛法求phi就可以了;
注意:x应-1;给的数据是1开始,实际在坐标上第一列x是零;
#include<cstdio> #include<algorithm> #include<cstdlib> #include<iostream> #include<vector> #include<queue> #include<cstring> using namespace std; typedef long long LL; int phi[40005]; void getphi(int n) { for(int i=2;i<n;i++)phi[i]=i; for(int i=2;i<n;i++)if(phi[i]==i) for(int j=i;j<n;j+=i) { phi[j]/=i; phi[j]*=(i-1); } } int main() { int n,ans=0; cin>>n; getphi(n); for(int i=2;i<n;i++) ans+=phi[i]; cout<<ans*2+3<<endl;//(+3):素数从2开始算,直接加上x=0,1; return 0; }
---恢复内容结束---
时间: 2024-10-20 22:19:20