bzoj2190 [SDOI2008]仪仗队

题目

http://www.lydsy.com/JudgeOnline/problem.php?id=2190

题解

不难发现,对于处在(x,y)且x,y互质的位置上的人才能被看见,即求小于x且与x互质的数的个数

筛法求欧拉函数

代码

include

include

include

include

include

include

define N 40005

define ll long long

using namespace std;

int n,prime[N],phi[N],num;
bool flag[N];
ll ans;

int main()
{
phi[1]=1;
for(int i=2;i<=40000;i++)
{
if(!flag[i]) prime[++num]=i,phi[i]=i-1;
for(int j=1;j<=num&&iprime[j]<=40000;j++)
{
int p=i
prime[j];flag[p]=1;
phi[p]=phi[i]phi[prime[j]];
if(i%prime[j]==0){phi[p]=phi[i]
prime[j];break;}
}
}
scanf("%d",&n);
for(int i=1;i<n;i++) ans+=phi[i];
printf("%d",ans*2+1);
return 0;
}

posted @ 2017-08-16 19:01  XYZinc  阅读(161)  评论(0)    收藏  举报