1. 程式人生 > >Luogu_2158_[SDOI2008]儀仗隊

Luogu_2158_[SDOI2008]儀仗隊

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;
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; }

---恢復內容結束---

Luogu_2158_[SDOI2008]儀仗隊