Luogu_2158_[SDOI2008]儀仗隊
阿新 • • 發佈:2017-09-09
return end ++ sdoi sin vector mes col for
---恢復內容開始---
如果(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; typedeflong 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; }
---恢復內容結束---
Luogu_2158_[SDOI2008]儀仗隊