题目描述

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

现在,C君希望你告诉他队伍整齐时能看到的学生人数。

输入输出格式

输入格式:

共一个数N

输出格式:

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

输入输出样例

输入样例#1:

  1. 4
输出样例#1:

  1. 9

说明

【数据规模和约定】

对于 100% 的数据,1 ≤ N ≤ 40000

题解:

欧拉函数PHI(n)表示的是比n小,并且与n互质的正整数的个数(包括1)

对与这个题来说,我们讲起始点为原点,将正方形分割为2个三角形 ,那么从2开始向上每行的数量等于他的欧拉函数,

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int size=40010,N=40010;
  4. const int MAXN=40010;
  5. int gcd(int a,int b) {
  6. return b==0?a:gcd(b,a%b);
  7. }
  8. int euler[size];
  9. int phi[MAXN],prime[MAXN],mark[MAXN];
  10. void Init()//O(n^2)
  11. {
  12. memset(euler,0,sizeof(euler));
  13. euler[1]=1;
  14. for(int i=2;i<size;i++)
  15. if(!euler[i])
  16. for(int j=i;j<size;j+=i)
  17. {
  18. if(!euler[j])
  19. euler[j]=j;
  20. euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出
  21. }
  22. }
  23. int tot;
  24. void getphi()//这个复杂度好像是O(n)
  25. {
  26. int i,j;
  27. phi[1]=1;
  28. for(i=2;i<=N;i++)//相当于分解质因式的逆过程
  29. {
  30. if(!mark[i])
  31. {
  32. prime[++tot]=i;//筛素数的时候首先会判断i是否是素数。
  33. phi[i]=i-1;//当 i 是素数时 phi[i]=i-1
  34. }
  35. for(j=1;j<=tot;j++)
  36. {
  37. if(i*prime[j]>N) break;
  38. mark[i*prime[j]]=1;//确定i*prime[j]不是素数
  39. if(i%prime[j]==0)//接着我们会看prime[j]是否是i的约数
  40. {
  41. phi[i*prime[j]]=phi[i]*prime[j];break;
  42. }
  43. else phi[i*prime[j]]=phi[i]*(prime[j]-1);//其实这里prime[j]-1就是phi[prime[j]],利用了欧拉函数的积性
  44. }
  45. }
  46. }
  47.  
  48. int main()
  49. {
  50. int a;
  51. scanf("%d",&a);
  52. Init();
  53. getphi();
  54. if(a==1)
  55. printf("%d\n",0);
  56. else
  57. {
  58. int ans=0;
  59. for (int i = 3; i <=a ; ++i) {
  60. ans+=phi[i-1];
  61. }
  62. printf("%d\n",ans*2+3);
  63. }
  64.  
  65. return 0;
  66. }

  

  

P2158 [SDOI2008]仪仗队 欧拉函数模板的更多相关文章

  1. P2158 [SDOI2008]仪仗队 && 欧拉函数

    P2158 [SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线 ...

  2. 洛谷P2158 [SDOI2008]仪仗队 欧拉函数的应用

    https://www.luogu.org/problem/P2158 #include<bits/stdc++.h> #define int long long using namesp ...

  3. BZOJ2190 [SDOI2008]仪仗队 [欧拉函数]

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

  4. 【bzoj2190】[SDOI2008]仪仗队 欧拉函数

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

  5. 【P2158】仪仗队&欧拉函数详解

    来一道数论题吧. 这个题一眼看上去思路明确,应该是数论,但是推导公式的时候却出了问题,根本看不出来有什么规律.看了马佬题解明白了这么个规律貌似叫做欧拉函数,于是就去百度学习了一下这东西. 欧拉函数的含 ...

  6. luogu2158 [SDOI2008]仪仗队 欧拉函数

    点 $ (i,j) $ 会看不见当有 $ k|i $ 且 $ k|j$ 时. 然后就成了求欧拉函数了. #include <iostream> #include <cstring&g ...

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

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

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

    2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3235  Solved: 2089 Description 作 ...

  9. P2158 [SDOI2008] (欧拉函数

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

随机推荐

  1. AngularJS表单验证开发案例

    angular支持IE8+浏览器,虽然性能很好,但是目前只适用于手机端项目 知识点:域$scopeAngularJS基础指令指令实现不同的功能学习思路和方法 <link rel="st ...

  2. Web前端开发规范(一)

    1.前言 网页开发技术从1989年开始至今已经走过了20余年,从最初纯粹的学术交流,到门户网站.电子商务网站.博客.E-mail.Web游戏.SNS网站等,以及到如今的移动Web网站(其实可以认为是P ...

  3. [原创]Debian9 安装配置MariaDB

    序言 这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先 ...

  4. day004-Map类

    1.Map集合概述 Map是一个接口,只要是实现了该接口的类就是一个双列集合. 双列集合就是每次存储元素时需要存储两个元素的集合. 这两个元素称为键值对, Key Value ==>映射关系 特 ...

  5. 怎样学习webpack - 走心分享

    很多朋友可能都知道webpack,也见过webpack的代码,但是不明白里面一坨一坨的东西是什么意思,到底有什么用处!我们每个人学习一个新东西可能都会有这个过程,但是我个人觉得webpack可能是最混 ...

  6. innerHTML动态添加html代码和脚本兼容性问题处理方法

    给某个元素的innerHTML赋值,并使得值中的js代码有效(兼容多个浏览器) 症状:给某个元素的 innerHTML 设置值时,如果提供的 HTML 代码中包含js脚本,很多时候这些脚本无效,或者在 ...

  7. 通过WEB网管登录

    6.1  通过WEB网管登录简介 S5100-SI/EI系列以太网交换机提供内置的WEB Server,用户可以通过WEB网管终端(PC)登录到交换机上,利用内置的WEB Server以WEB方式直观 ...

  8. python_4_interaction

    #1(方法1)尽量不用这种拼接法,效率低下,占用内存多 name=input("name:") age=input('age:') job=input('job:') salary ...

  9. Docker 入门教程与实践

    title: Docker 入门教程与实践 tags: Docker ---- 在Windows上安装Docker客户端 1.下载Docker TollBox: https://docs.docker ...

  10. 将matlab处理结果保存为图像文件

    imwrite(testIm, 'Data/Test/testIm.bmp', 'BMP');