欧拉函数的应用

原题:

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

1<=N<=40000

首先可以把图沿着左下角到右上角内条对角线对折一下,两边是一样的所以只要求出其中一边*2+1即可(因为对角线还有一个,所以+1)

每一边怎么求呐

可以发现所有能看到的点都满足gcd(x,y)==1

然后就是求1<=x<=n-1的phi的和了

为什么呐

首先y一定要比x小,否则就跑到另一边去了(上面对折了↑),然后gcd(x,y)还要==1,就是比x小且与x互质的数的个数,也是欧拉函数的定义,所以直接求phi的和即可

这里需要注意,左下角的坐标要设成0(这也是上面求的是1<=x<=n-1的phi的和↑的原因),因为这样才能保证x-左下角的值是(x,y)和左下角的水平距离

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 using namespace std;
 7 int n;
 8 int kang[41000],phi[41000],zhi[410000],ztop=0;
 9 void shai(){
10     memset(kang,0,sizeof(kang));
11     phi[1]=1;
12     for(int i=2;i<=n;i++){
13         if(!kang[i]){  phi[i]=i-1;  zhi[++ztop]=i;}
14         for(int j=1;j<=ztop && i*zhi[j]<=n;j++){
15             kang[i*zhi[j]]=true;
16             if(i%zhi[j]==0){  phi[i*zhi[j]]=phi[i]*zhi[j];  break;}
17             phi[i*zhi[j]]=phi[i]*phi[zhi[j]];
18         }
19     }
20 }
21 int main(){//freopen("ddd.in","r",stdin);
22     cin>>n;
23     shai();
24     long long bowl=0;
25     for(int i=1;i<n;i++)  bowl+=phi[i];
26     cout<<bowl*2+1<<endl;
27     return 0;
28 }

View Code

转载于:https://www.cnblogs.com/JSL2018/p/5862900.html

【SDOI2008】【P1377】仪仗队相关推荐

  1. 【SDOI2008】仪仗队

    题面 题解 当$(x,y)$能被看到时,$gcd(x,y)=1$, 所以可以求$\sum_{i=0}^n\sum_{j=0}^n[gcd(x,y)=1]$ 或者用欧拉函数 代码 #include< ...

  2. 思路与好题记录与小技巧

    记录好题,值得看看或再做一遍: p1306  SDOI2008,P1377仪仗队 BZOJ1067降雨量 想看的东西: https://ruanx.pw/post/%E7%89%9B%E9%A1%BF ...

  3. python 查找文件内容性能 grep_使用grep查找文件中指定字符出现的次数

    关于IOS浏览器:document,body的click事件触发规则 今天做了个手机页面,点击某个按钮->弹出菜单,再点击菜单以外的任意位置->关闭菜单,在其他浏览器里面没有问题,但是在I ...

  4. BZOJ 2190: [SDOI2008]仪仗队( 欧拉函数 )

    假设C君为(0, 0), 则右上方为(n - 1, n - 1). 一个点(x, y) 能被看到的前提是gcd(x, y) = 1, 所以 answer = ∑ phi(i) * 2 + 2 - 1 ...

  5. BZOJ 2190: [SDOI2008]仪仗队

    2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 2689  Solved: 1713 [Submit][Sta ...

  6. bzoj 2190: [SDOI2008]仪仗队 线性欧拉函数

    2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MB [Submit][Status][Discuss] Description 作 ...

  7. bzoj2190 [SDOI2008]仪仗队(欧拉函数)

    2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 3203  Solved: 2062 [Submit][Sta ...

  8. 「BZOJ2190」[SDOI2008] 仪仗队 - 欧拉函数

    ->点我进原题 [SDOI2008] 仪仗队 时空限制 1000ms / 128MB Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵, ...

  9. 「欧拉定理」[SDOI2008]仪仗队

    [SDOI2008]仪仗队 https://ac.nowcoder.com/acm/problem/20313 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练. 仪仗队是由学生组成的N * N ...

最新文章

  1. 《深入理解java虚拟机》
  2. C#中获取当前应用程序的路径及环境变量
  3. 9. 混合模型和EM(1)
  4. Hibernate Tomcat JNDI数据源配置(转)
  5. java console press any key_请问在JAVA中怎么实现在控制台下press any key to continue的功能?...
  6. Angular应用里使用rxjs提供的观察者和发布者实现事件处理
  7. Java 7 –反编译项目硬币
  8. 前端学习(3254):react中todolist制作静态组件
  9. SharePoint学习札记[3] — Office SharePoint Server 2007部署
  10. android 版本更新工具类_报表分析工具FastReport .Net 2021年超大版本更新,实现了对.NET 5的支持...
  11. C 关于链表的一些操作
  12. linux kernel基本构成的内容有下列哪些项_Linux下逻辑地址-线性地址-物理地址详解...
  13. MSIL实用指南-struct的生成和操作
  14. nuke 11 for mac(视频后期合成软件)破解教程
  15. idea自定义banner
  16. 说话人性别识别——语音检测初探
  17. Untiy学习 简单的脚本方法
  18. Android notes
  19. Fidder 请求信息颜色的含义
  20. 土方工程量计算表格excel_土石方计算电子表格

热门文章

  1. java多态是怎样产生的,java 多态产生的疑问
  2. 服务启动失败_将控制台程序转换为服务运行
  3. 20200315:检查替换后的词是否有效(leetcode1003)
  4. php反序列化java.long_细数java中Long与Integer比较容易犯的错误总结
  5. idea引入本地jar包及打包
  6. 笔记本启动关闭小键盘NUM LOCK的N种方法
  7. 第5章 set命令详解
  8. 智能一代云平台(三十六):项目中如何做到避免传递依赖
  9. “跨国视频造假窝点”曝光!这个大规模数据集,帮AI揪出99%换脸视频
  10. 那个马斯克的小迷弟开始讲深度学习了,课程视频+PPT已放出