题目描述

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

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

输入输出格式

输入格式:

共一个数N

输出格式:

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

输入输出样例

输入样例#1:

4
输出样例#1:

9

说明

【数据规模和约定】

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

题解:

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

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

#include <bits/stdc++.h>
using namespace std;
const int size=40010,N=40010;
const int MAXN=40010;
int gcd(int a,int b) {
return b==0?a:gcd(b,a%b);
}
int euler[size];
int phi[MAXN],prime[MAXN],mark[MAXN];
void Init()//O(n^2)
{
memset(euler,0,sizeof(euler));
euler[1]=1;
for(int i=2;i<size;i++)
if(!euler[i])
for(int j=i;j<size;j+=i)
{
if(!euler[j])
euler[j]=j;
euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出
}
}
int tot;
void getphi()//这个复杂度好像是O(n)
{
int i,j;
phi[1]=1;
for(i=2;i<=N;i++)//相当于分解质因式的逆过程
{
if(!mark[i])
{
prime[++tot]=i;//筛素数的时候首先会判断i是否是素数。
phi[i]=i-1;//当 i 是素数时 phi[i]=i-1
}
for(j=1;j<=tot;j++)
{
if(i*prime[j]>N) break;
mark[i*prime[j]]=1;//确定i*prime[j]不是素数
if(i%prime[j]==0)//接着我们会看prime[j]是否是i的约数
{
phi[i*prime[j]]=phi[i]*prime[j];break;
}
else phi[i*prime[j]]=phi[i]*(prime[j]-1);//其实这里prime[j]-1就是phi[prime[j]],利用了欧拉函数的积性
}
}
} int main()
{
int a;
scanf("%d",&a);
Init();
getphi();
if(a==1)
printf("%d\n",0);
else
{
int ans=0;
for (int i = 3; i <=a ; ++i) {
ans+=phi[i-1];
}
printf("%d\n",ans*2+3);
} return 0;
}

  

  

最新文章

  1. 《Linux内核设计与实现》读书笔记(十四)- 块I/O层
  2. Xcode7 使用NSURLSession发送HTTP请求的问题
  3. poj 1410 线段相交判断
  4. JS 中数组的排序和去重
  5. ADO.NET 结构 集中数据库联接结构
  6. ORA-12012 error on auto execute of job 8887
  7. 你真的了解WebSocket吗?
  8. 201521123019 《Java程序设计》第8周学习总结
  9. PAT1099:Build A Binary Search Tree
  10. 超实用的JavaScript代码段 Item3 --图片轮播效果
  11. ServiceHub.DataWarehouseHost.exe内存泄漏问题的处理
  12. javascript学习-基本类型
  13. Go基础系列:互斥锁Mutex和读写锁RWMutex用法详述
  14. day03运算符 逻辑运算符
  15. SqlBulkCopy简单封装,让批量插入更方便
  16. android开发之图表
  17. vue-devtools 的安装和使用
  18. 在deepin中安装docker
  19. (原)CNN中的卷积、1x1卷积及在pytorch中的验证
  20. 【Python全栈-CSS】CSS入门

热门文章

  1. RESTful API设计基本原则
  2. 关于 supersocket 不能通过Bootstrap 启动
  3. [topcoder]TheConsecutiveIntegersDivOne
  4. JavaScript 如何编写计算器
  5. rosservice call ERROR:Unable to load type ... Have you typed &#39;make&#39;
  6. leetcode:查找
  7. Altium_Designer-PCB的覆铜步骤
  8. Ubuntu Deb包安装&lt;个人笔记&gt;
  9. 关于SAP UI5数据绑定我的一些原创内容
  10. 1923. Scary Politics (timus) (dfs) search