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. Asp.Net MVC 获取当前 Controller Action Area

    获取控制器名称: ViewContext.RouteData.Values["controller"].ToString(); 获取Action名称: ViewContext.Ro ...

  2. Gitblit版本服务器环境部署记录

    Gitblit介绍Gitblit 是一个纯 Java 库用来管理.查看和处理 Git 资料库.相当于 Git 的 Java 管理工具,支持linux系统.Git是分布式版本控制系统,它强调速度.数据一 ...

  3. Python_复习_习题_29

    # 之前做得的题 以后再遇到能保证会# 下周二考 :所有的知识# 面试题:认真对待## 三元运算符# 接收结果的变量 = 条件为真的结果 if 条件 else 条件为假的结果# 接收结果的变量 = “ ...

  4. pair work 附加题解法(张艺 杨伊)

    1.改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享,目前的设计有什么缺点, 你会如何改进它? 目前的缺点: (1)电梯由于载客重量不 ...

  5. Scrum Meeting NO.8

    Scrum Meeting No.8 1.会议内容 2.任务清单 徐越 序号 近期的任务 进行中 已完成 1 代码重构:前端通讯模块改为HttpClient+Json √ 2 添加对cookies的支 ...

  6. 【Beta阶段】第九次Scrum Meeting!(论坛已成功上线)

    每日任务内容: 本次会议为第九次Scrum Meeting会议~ 本次会议为团队项目第九次会议,在会议前大家取得了重大成果! 队员 昨日完成任务 明日要完成任务 刘乾 #179 完成1021的数据处理 ...

  7. linux内核期中总结

    20135132陈雨鑫 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  ...

  8. 20150401 作业2 结对 四则运算ver 1.0

    Web項目下 Tomcat服務器的路徑 /WebContant/ 目錄下 SE2_2.jsp <%@ page language="java" contentType=&qu ...

  9. 第三个Sprint冲刺第五天(燃尽图)

  10. 关于mybatis的@Param注解和参数

    1,使用@Param注解 当以下面的方式进行写SQL语句时: @Select("select column from table where userid = #{userid} " ...