BZOJ 2190 [SDOI2008]仪仗队 欧拉函数

来源:互联网 发布:php工作前景怎么样 编辑:程序博客网 时间:2024/05/18 03:08

Description

  作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。       现在,C君希望你告诉他队伍整齐时能看到的学生人数。

Input

  共一个数N。

Output

  共一个数,即C君应看到的学生人数。

Sample Input

  4

Sample Output

  9


HINT

【数据规模和约定】   对于 100% 的数据,1 ≤ N ≤ 40000
















传送门
竟然发现这个题没写题解……赶紧来补一发、
很容易看出条件是gcd(x,y)=1,那么(x,y)可以被看到。
如何统计这个呢。。这个矩阵实际上是对称的,
假设枚举了x,那么每次求出几个y和它互质即可,
那么同理y的情况是一样的,答案要*2.
最后别忘了特殊的3个点。





#include<cstdio>#include<algorithm>#define ll long long#define TY 1000000007using namespace std;int lenty,prime[5000];bool zcr[40005];ll a,b,phi[40005];int main(){lenty=0;for (int i=2;i<=40000;i++){if (!zcr[i])phi[i]=i-1,prime[++lenty]=i;for (int j=1;j<=lenty && i*prime[j]<=40000;j++){zcr[i*prime[j]]=1;if (i%prime[j]==0)phi[i*prime[j]]=phi[i]*prime[j];elsephi[i*prime[j]]=phi[i]*(prime[j]-1); }}scanf("%lld",&a);if (a==1) return puts("0"),0;phi[0]=(ll)0;for (int i=1;i<=40000;i++)phi[i]=phi[i-1]+phi[i];ll tyans=phi[a-1]*2+3;printf("%lld\n",tyans);return 0;}


原创粉丝点击