0
点赞
收藏
分享

微信扫一扫

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

Ad大成 2022-09-15 阅读 19


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 1000000007
using 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];
else phi[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;
}



举报

相关推荐

0 条评论