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

错误日志: 没有特判 \(N = 1\) 的情况
Solution
除开 \((0,1) (1,0) (0,0)\) 这三个点不谈, 可以发现一个点可以被看到, 当且仅当 \(gcd(x, y) = 1\)
所以把目光放到互质上
类似埃式筛法, 我们可以在 \(O(n\log n)\) 的时间内求出 \(1-n\) 的欧拉函数
void euler(int n){
for(int i = 2;i <= n;i++)phi[i] = i;
for(int i = 2;i <= n;i++){
if(phi[i] == i){
for(int j = i;j <= n;j += i){
phi[j] = phi[j] / i * (i - 1);
}
}
}
}
发现这题左上部分与右下部分是对称的, 因为 \(y = x\) 这条线上的点被 \((1,1)\) 盖住了, 所以欧拉函数实际上只累积到 \(n - 1\)
我们还要加上最开始除开的三个点
即所求为: $$2 * \sum_{i = 2}^{N - 1}{\phi(i)} + 3$$
注意特判 \(N = 1\) 的情况
Code
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
typedef long long LL;
using namespace std;
int RD(){
int out = 0,flag = 1;char c = getchar();
while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const int maxn = 40019;
int num, phi[maxn];
void euler(int n){
for(int i = 2;i <= n;i++)phi[i] = i;
for(int i = 2;i <= n;i++){
if(phi[i] == i){
for(int j = i;j <= n;j += i){
phi[j] = phi[j] / i * (i - 1);
}
}
}
}
int main(){
num = RD();
if(num == 1){puts("0");return 0;}
euler(num - 1);
int ans = 0;
for(int i = 2;i <= num - 1;i++)ans += phi[i];
printf("%d\n", ans * 2 + 3);
return 0;
}
不知道有啥卵用的欧拉定理
若 $$a \perp n$$ 则
\]
P2158 [SDOI2008]仪仗队 && 欧拉函数的更多相关文章
- P2158 [SDOI2008]仪仗队 欧拉函数模板
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...
- 洛谷P2158 [SDOI2008]仪仗队 欧拉函数的应用
https://www.luogu.org/problem/P2158 #include<bits/stdc++.h> #define int long long using namesp ...
- BZOJ2190 [SDOI2008]仪仗队 [欧拉函数]
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...
- 【bzoj2190】[SDOI2008]仪仗队 欧拉函数
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...
- 【P2158】仪仗队&欧拉函数详解
来一道数论题吧. 这个题一眼看上去思路明确,应该是数论,但是推导公式的时候却出了问题,根本看不出来有什么规律.看了马佬题解明白了这么个规律貌似叫做欧拉函数,于是就去百度学习了一下这东西. 欧拉函数的含 ...
- luogu2158 [SDOI2008]仪仗队 欧拉函数
点 $ (i,j) $ 会看不见当有 $ k|i $ 且 $ k|j$ 时. 然后就成了求欧拉函数了. #include <iostream> #include <cstring&g ...
- BZOJ 2190: [SDOI2008]仪仗队( 欧拉函数 )
假设C君为(0, 0), 则右上方为(n - 1, n - 1). 一个点(x, y) 能被看到的前提是gcd(x, y) = 1, 所以 answer = ∑ phi(i) * 2 + 2 - 1 ...
- 2190: [SDOI2008]仪仗队(欧拉函数)
2190: [SDOI2008]仪仗队 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 3235 Solved: 2089 Description 作 ...
- P2158 [SDOI2008] (欧拉函数
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...
随机推荐
- PSP总结报告1
回答作业问题 1.回想一下你曾经对计算机专业的畅想 我高考后报考的是计算机科学与技术,当时对计算机技术基本了解为零,当时以为什么东西都会用到计算机,学计算机以后不会找不到工作,刚开学的时候对计算机一窍 ...
- 记事本App之NABCD
在经过了漫长的讨论之后,在经历了无数次提议.否定.再提议.改进之后.我们团队的团队项目终于有了结果,小组成员一致同意做一个移动端记事本的app.下面我就来详细的阐明我们项目的NABCD这5大项内容. ...
- Linux课程学习之我思
陈民禾,原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000,我的博客中有一部分是出自M ...
- 第五次作业+4505B寝室队
1.需求分析: 作一个简单的MP3播放器,并能显示播放文件的路径. 2.设计思路: 用窗体设计播放器的界面,以市面上主流的播放器为标准,采用一个窗体的界面. 3.实现的功能: 第一是能播放MP3文件, ...
- Leetcode题库——13.罗马数字转整数
@author: ZZQ @software: PyCharm @file: Luoma2Int.py @time: 2018/9/16 17:06 要求: 罗马数字转数字 字符 数值 I 1 V 5 ...
- Mac 下搭建 Apache 服务器
Apache作为最流行的Web服务器端软件之一,它的优点与地位不言而喻.下面介绍下在Mac下搭建Apache服务器的步骤: (1)“前往” –>”个人” (2)在你的个人目录下新建一个文件夹,改 ...
- 封装react组件——三级联动
思路: 数据设计:省份为一维数组,一级市为二维数组,二级市/区/县为三维数组.这样设计的好处在于根据数组索引实现数据的关联. UI组件: MUI的DropDownMenu组件或Select Field ...
- Alpha阶段敏捷冲刺①Scrum 冲刺博客
第 1 篇 Scrum 冲刺博客对整个冲刺阶段起到领航作用,应该主要包含三个部分的内容: 各个成员在 Alpha 阶段认领的任务 成员 任务 张晨晨 完成界面设计(前端) 黄登峰 完成界面设计(前端) ...
- windows 下查看进程开始运行的时间
1. 打开运行 输入 msinfo32 然后在软件环境- 正在运行任务- 就能够看到运行开始的时间了.
- 在MFC中显示图片(opencv Mat类型)
1,在MFC窗体中添加picture control控件,并添加对应的变量名 2,在窗体的初始化窗口中添加: namedWindow(); HWND hWnd = (HWND)cvGetWindowH ...