P2158 [SDOI2008]仪仗队

题目描述

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

输入输出格式

输入格式:

共一个数N

输出格式:

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

说明

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


今天看了一天的欧拉函数,明天月考放飞自我了...

对于欧拉函数

将正整数\(N\)用算术基本定理进行分解\(N=\prod_{i=1}^k{c_i}^{m_i}\),\(k\)为\(N\)分解质因数后的质因子种类的个数。

则\(φ(N)=N* \prod_{i=1}^{k} (1-\frac{1}{c_i})\)

证明方法需要用到容斥原理。

几个性质:

  1. 若\(gcd(a,b)=1\),则\(φ(ab)=φ(a)*φ(b)\)

    积性函数定义啊。

  2. 若质数\(q\)满足\(q|n\)且\(q^2|n\),则\(φ(q)=φ(n/q)*q\)

    代入定义式可以得到

  3. 若质数\(q\)满足\(q|n\)且\(q^2 \nmid n\),则\(φ(q)=φ(n/q)*(q-1)\)

    由积性函数性质得到

  4. \(\sum_{d|n}φ(d)=n\)

    先证明是积性函数,再讨论单因子即可

  5. \(φ(n)*n/2=\sum_{d},gcd(d,n)=1\)

    成对存在


在看看这题。

我们以左下角为原点,第一行为\(x\)轴,第一列为\(y\)轴。

则若点\((x,y)\)能被看见,则\((dx,dy)\),\(d \in N^*\)会被遮挡

则点\((x,y)\)能被看见的条件为\(gcd(x,y)=1\),即它们互质。

那么对此,我们可以将我们要求的转换为\(\sum_{i=2}^n φ(i)\)

当然这只是右下角的一部分。

加上(0,1),(1,1),(1,0)三个点,最终答案为\(3+2*(\sum_{i=2}^n φ(i))\)


对于欧拉函数的求和,我们可以借助线性筛的思想做到线性的复杂度

可以参考代码。

code:

#include <cstdio>
const int N=40010;
int v[N],prime[N],eu[N],cnt=0,ans=0,n;
void eular()
{
for(int i=2;i<=n;i++)
{
if(!v[i])
{
v[i]=i;
prime[++cnt]=i;
eu[i]=i-1;
ans+=eu[i];
}
for(int j=1;j<=cnt;j++)
{
int tmp=i*prime[j];
if(v[i]<prime[j]||tmp>n) break;
v[tmp]=prime[j];
eu[tmp]=eu[i]*(i%prime[j]?prime[j]-1:prime[j]);
ans+=eu[tmp];
}
}
}
int main()
{
scanf("%d",&n);
n--;
if(!n) {printf("0\n");return 0;}
eular();
printf("%d\n",(ans<<1)+3);
return 0;
}

2018.5.28

洛谷 P2158 [SDOI2008]仪仗队 解题报告的更多相关文章

  1. 洛谷——P2158 [SDOI2008]仪仗队

    P2158 [SDOI2008]仪仗队 找规律大水题嘛,如果你做过P1170 兔八哥与猎人 这题得到的规律是$a,b,c,d$,若$gcd(a-b,c-d)==1$ 那么$a,b$就能看到$c,d$ ...

  2. 洛谷P2158 [SDOI2008]仪仗队

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

  3. 洛谷 P2158 [SDOI2008]仪仗队 && 洛谷 P1447 [NOI2010]能量采集

    https://www.luogu.org/problemnew/show/P2158 以人所在位置为(0,0)建立坐标系, 显然除了(0,1)和(1,0)外,可以只在坐标(x,y)的gcd(x,y) ...

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

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

  5. 洛谷 P2158 [SDOI2008]仪仗队

    题意简述 给定一个n,求gcd(x, y) = 1(x, y <= n)的(x, y)个数 题解思路 欧拉函数, 则gcd(x, y) = 1(x <= y <= n)的个数 ans ...

  6. 洛谷 P1783 海滩防御 解题报告

    P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...

  7. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  8. 洛谷1087 FBI树 解题报告

    洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...

  9. 洛谷 P3349 [ZJOI2016]小星星 解题报告

    P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...

随机推荐

  1. C/C++中连接函数strcat的应用(简单讲解)

    有位学弟问到我如何将两个字符连接起来,想想java/python里面可以直接用+连接起来,可是C/C++里面有没有这么方便的做法呢? 答案是有的,在C语言的string.h库中有个神奇的函数叫做str ...

  2. ZooKeeper 典型的应用场景——及编程实现

    如何使用 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储 ...

  3. Visual Studio 2015的安装及单元测试练习

    第一部分:Visual Studio 2015的安装 我电脑系统是win10,所以安装的是Visual Studio 2015,安装步骤部分截图如图所示: 1.安装类型选项界面:可以选择默认安装,可以 ...

  4. SE Class's Individual Project--12061161 赵梓皓

    1. 项目预计的用时 其实刚开始以为这个项目不难写,因为上学期oo课程上用java写过类似的程序(貌似还比这个复杂).觉得主要的难点在于学习c++语言. 总的项目被分为大概3个部分. 其一,文件遍历. ...

  5. 在Windows Server 2008R2中部署 AspNetCore

    1.部署时,先安装运行时 https://dotnet.microsoft.com/download 2.安装vc_redist.x64   https://www.microsoft.com/en- ...

  6. 必应语音API(Bing text to speech API)

    前言 Link : Microsoft Speech API overview 通过这个链接,大致了解Bing speech API的语音识别和语音合成两部分, 这次是需要用到TTS,所以就直接看TT ...

  7. CentOS查看版本及架构信息

    https://blog.csdn.net/shuaigexiaobo/article/details/78030008

  8. Javascript中实现继承的方式

    js中实现继承和传统的面向对象语言中有所不同:传统的面向对象语言的继承由类来实现,而在js中,是通过构造原型来实现的,原型与如下几个术语有关: ①构造函数:在构造函数内部拥有一个prototype属性 ...

  9. 使用docker-compose 大杀器来部署服务

    使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...

  10. Oracle12c Clone PDB 的方法

    1. 创建PDB的存放路径,举例: 2. 设置 数据库创建数据文件的目录 alter system set db_Create_file_dest='C:\app\Administrator\orad ...