【BZOJ】2190 [SDOI2008]仪仗队
生活随笔
收集整理的這篇文章主要介紹了
【BZOJ】2190 [SDOI2008]仪仗队
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【算法】歐拉函數 歐拉線性篩
【題解】將圖從左至右,從下至上,分別標號0~n-1。
除了坐標0,一個點會被觀察到當且僅當其坐標(i,j)的i與j互質,否則會被(i/d,j/d)擋住。
所以累加2~n-1的歐拉函數,再在處理左下角三個點即可。
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=40010; int n,phi[maxn],prime[maxn]; bool mark[maxn]; void pre_phi(int x) {phi[1]=1;int tot=0;memset(mark,0,sizeof(mark));for(int i=2;i<=x;i++){if(!mark[i]){prime[++tot]=i;phi[i]=i-1;}for(int j=1;j<=tot;j++){if(i*prime[j]>x)break;mark[i*prime[j]]=1;//篩 if(i%prime[j]==0)phi[i*prime[j]]=phi[i]*prime[j];else phi[i*prime[j]]=phi[i]*(prime[j]-1);}} // for(int i=1;i<=x;i++)printf("phi[%d]=%d\n",i,phi[i]); } int main() {scanf("%d",&n);pre_phi(n-1);int ans=1;for(int i=2;i<=n-1;i++)ans+=phi[i];printf("%d",ans*2+1);return 0; } View Code?
轉載于:https://www.cnblogs.com/onioncyc/p/7136917.html
總結
以上是生活随笔為你收集整理的【BZOJ】2190 [SDOI2008]仪仗队的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python继承实现原理封装proper
- 下一篇: 记北邮创新展