题目链接

题目

题目描述

作为体育委员,C君负责这次运动会仪仗队的训练。

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

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

输入描述

共一个数N。

输出描述

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

示例1

输入

4

输出

9

备注

对于 100% 的数据,\(1 \le N \le 40000\)

题解

知识点:欧拉函数,筛法。

经典老题。

不妨关注下三角区域,上三角区域答案是一样的。

我们以左下角为 \((0,0)\) 原点,发现 \(x \geq 2\) 的每列的答案为 \(\varphi(x)\) ,因为当且仅当横纵坐标互质时,这个点不会被任何点遮挡(不存在一个点的它的约数)。\(x = 1\) 时,答案为 \(\varphi(1) + 1\) ,因为特判 \(y=0\) 的情况。

最后,还要减去对角线的重复情况,答案为 \(\displaystyle 2+2\sum_{i=1}^{n-1} \varphi(i) - 1\) , \(n=1\) 时答案特判为 \(0\) 。

欧拉函数可以通过线性筛得到。

时间复杂度 \(O(n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>
using namespace std;
using ll = long long; const int N = 40007;
bool vis[N];
vector<int> prime;
int phi[N];
void get_euler(int n) {
phi[1] = 1;
for (int i = 2;i <= n;i++) {
if (!vis[i]) {
prime.push_back(i);
phi[i] = i - 1;
}
for (auto j : prime) {
if (i * j > n)break;
vis[i * j] = 1;
if (!(i % j)) {
phi[i * j] = j * phi[i];
break;
}
phi[i * j] = (j - 1) * phi[i];
}
}
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;
cin >> n;
get_euler(n - 1);
int ans = 0;
for (int i = 1;i <= n - 1;i++) ans += phi[i];
ans = ans * 2 + (n >= 2);
cout << ans << '\n';
return 0;
}

NC20313 [SDOI2008]仪仗队的更多相关文章

  1. BZOJ 2190: [SDOI2008]仪仗队

    2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2689  Solved: 1713[Submit][Statu ...

  2. [SDOI2008]仪仗队

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

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

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

  4. P2158 [SDOI2008]仪仗队

    P2158 [SDOI2008]仪仗队图是关于y=x对称的,横纵坐标一定是互质的否则在之前就被扫过了,所以就可以用欧拉函数再*2就完了. #include<iostream> #inclu ...

  5. 洛谷 P2158 [SDOI2008]仪仗队 解题报告

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

  6. P2158/bzoj2190 [SDOI2008]仪仗队

    P2158 [SDOI2008]仪仗队 欧拉函数 计算下三角的点数再*2+1 观察斜率,自行体会 #include<iostream> #include<cstdio> #in ...

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

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

  8. [LuoguP2158][SDOI2008]仪仗队

    [LuoguP2158][SDOI2008]仪仗队(Link) 现在你有一个\(N \times N\)的矩阵,求你站在\((1,1)\)点能看到的点的总数. 很简洁的题面. 这道题看起来很难,但是稍 ...

  9. [SDOI2008]仪仗队 (洛谷P2158)

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

  10. bzoj 2190: [SDOI2008]仪仗队 线性欧拉函数

    2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 作为 ...

随机推荐

  1. gitee 创建代码仓库,并提交本地代码

    本文为博主原创,转载请注明出处: 1. 配置本地 gitee 的配置: git config --global user.name "xiangBaxiang" git confi ...

  2. 在Vue中可以使用方括号法获得想要的对象数据吗?

    1.问题 Document {{message}} {{school.name}}{{school[mobile]}} 在这里 {{school.name}}{{school[mobile]}} 不可 ...

  3. vscode插件 - 浏览器中自动刷新 Live Server

  4. [转帖]SecurityProtocolType 枚举

    https://learn.microsoft.com/zh-cn/dotnet/api/system.net.securityprotocoltype?view=net-8.0 命名空间: Syst ...

  5. [转帖]如何查看Docker容器环境变量,如何向容器传递环境变量

    https://www.cnblogs.com/larrydpk/p/13437535.html 1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 了解Docker容器的运行 ...

  6. [转帖]Linux——Shell脚本参数传递的2种方法

    https://www.cnblogs.com/caoweixiong/p/12334418.html 前言 平时会遇到很多脚本都有参数选项,类似: ./test.sh -f config.conf ...

  7. [转帖]K8S 挂载 minio csi 的方式.

    对象存储   前置条件 安装Minio(在102主机上操作) 安装csi-s3插件(在103主机上操作) 使用 参考 本文介绍kubernetes如何基于对象存储(minio)创建PV与PVC 前置条 ...

  8. [转帖]服务器稳定性测试-LTP压力测试方法及工具下载

    简介 LTP(LinuxTest Project)是SGI.IBM.OSDL和Bull合作的项目,目的是为开源社区提供一个测试套件,用来验证Linux系统可靠性.健壮性和稳定性.LTP测试套件是测试L ...

  9. [转贴]win10临时修改、永久cmd 编码格式的方法

    https://www.jianshu.com/p/40a9fbaf1cac   cmd 前言 有时候,运行一些命令行程序某些字符无法正常显示,常见的就是方块,或者是火星文字都是由于 cmd 程序的默 ...

  10. K8S 使用loki 监控 应用日志的搭建办法

    1. 背景 这几天一直在用k8s部署分SU的测试环境,开发反馈看日志比较麻烦. 昨天晚上在家里本来想搭建ELK 发现比较重, 又说有一个比较轻量级的 loki 可以实现使用grafana进行监控和查看 ...