题目描述 Description
作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。
现在,C君希望你告诉他队伍整齐时能看到的学生人数。
![](http://codevs.cn/media/image/problem/2296.png)
输入描述 Input Description
共一个数N。
输出描述 Output Description
共一个数,即C君应看到的学生人数。
样例输入 Sample Input
4
样例输出 Sample Output
9
数据范围及提示 Data Size & Hint
对于 30% 的数据,1≤N≤1000
对于 100% 的数据,1≤N≤40000
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/* 对于一个例子,如果我们把符合要求的点找出来,会发现所有点的x-1与y-1互质,且图是对称的,那么我们就可以循环1~n-1,找出小于它们并与它们互质的数,统计个数*2+1,典型的欧拉函数题目。 */ #include<cstdio> #include<iostream> #define M 40010 using namespace std; int phi[M],n; void oula() { for(int i=1;i<=n;i++) phi[i]=i; for(int i=2;i<=n;i++) if(phi[i]==i) for(int j=1;j<=n/i;j++) phi[i*j]=phi[i*j]/i*(i-1); } int main() { scanf("%d",&n); oula(); int ans=0; for(int i=1;i<n;i++) ans+=phi[i]; printf("%d",ans*2+1); return 0; }