2190: [SDOI2008]仪仗队
题目:
题解:
跟着企鹅大佬做题!
自己瞎搞搞就OK,不难发现,如果以C作为原点建立平面直角坐标系,那么在这个坐标系中,坐标为(x,y)且GCD(x,y)==1的点肯定看不见
其实就相当于要求两点之间连线的斜率唯一。。。也就是1-n-1的不同的互质点对
那就可以用欧拉来做,直接求1-n-1的phi值(因为x或y最多达到n-1)
不过最后要输出phi[n-1]*2+3,因为phi只求出一边,而坐标系是对称的,+3则是因为一开始左下角的三条边欧拉不会求(因为欧拉从2开始啊)
代码:
1 #include2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int phi[41000];//x,y均小于等于n的不同的互质数对的个数 8 int n; 9 void get_phi()10 {11 for(int i=2;i<=n;i++)phi[i]=i;12 for(int i=2;i<=n;i++)13 {14 if(phi[i]==i)15 for(int j=i;j<=n;j+=i)16 phi[j]-=phi[j]/i;17 phi[i]+=phi[i-1];18 }19 }20 int main()21 {22 scanf("%d",&n);n--;23 get_phi();printf("%d\n",phi[n]*2+3);24 return 0;25 }