码迷,mamicode.com
首页 > 其他好文 > 详细

[SDOI2008]仪仗队

时间:2017-08-15 11:28:18      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:isp   color   for   答案   amp   种类   sizeof   sdoi2008   ems   

OJ题号:

BZOJ2190、洛谷2158

思路:

欧拉$\varphi$函数的应用。
经过观察可发现,可以被观察到的点,其坐标$(x,y)$中$x$和$y$必定互质。
那么,除去左边第一列、下边最后一行的点,左上角、右下角总共能看到的点数是$\displaystyle{\sum_{1\leq i<n}}\varphi(i)$。
用一种类似于素数筛的方法即可求出所有的欧拉$\varphi$函数值。
注意最后对角线会重复算,需要减去一次,并加上左边第一列、下边最后一行共两次,最后答案是$ans\times 2+1$。

 1 #include<cstdio>
 2 #include<cstring>
 3 int main() {
 4     int n;
 5     scanf("%d",&n);
 6     int phi[n];
 7     memset(phi,0,sizeof phi);
 8     int ans=phi[1]=1;
 9     for(int i=2;i<n;i++) {
10         if(!phi[i]) {
11             for(int j=i;j<n;j+=i) {
12                 if(!phi[j]) {
13                     phi[j]=j;
14                 }
15                 phi[j]=phi[j]/i*(i-1);
16             }
17         }
18         ans+=phi[i];
19     }
20     printf("%d\n",ans<<1|1);
21     return 0;
22 } 

 

[SDOI2008]仪仗队

标签:isp   color   for   答案   amp   种类   sizeof   sdoi2008   ems   

原文地址:http://www.cnblogs.com/skylee03/p/7363816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!