洛谷P2158 [SDOI2008]仪仗队
时间:2022-05-08
本文章向大家介绍洛谷P2158 [SDOI2008]仪仗队,主要内容包括题目描述、输入输出格式、输入输出样例、说明、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
题目描述
作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。
现在,C君希望你告诉他队伍整齐时能看到的学生人数。
输入输出格式
输入格式:
共一个数N
输出格式:
共一个数,即C君应看到的学生人数。
输入输出样例
输入样例#1:
4
输出样例#1:
9
说明
【数据规模和约定】
对于 100% 的数据,1 ≤ N ≤ 40000
有一个比较显然的结论,如果我们把教练所在的点看做坐标原点,建立坐标系
那么一个点(i,j)能被看到,当且仅当gcd(i,j)=1。否则会被dfrac {i}{gcd left( i,jright) },dfrac {j}{gcd left( i,jright) }这个点挡住
对于x,y轴,我们特殊判断一下
这样问题就转化为求sum ^{n-1}_{i=1}sum ^{n-1}_{i=1}left[ gcd left( i,jright) =1right]
这是一个非常经典的问题
我们不妨假设i<j,那么上面的公式就是2*sum ^{n-1}_{i=1}varphi left( iright)-1(最后的-1可以理解为(1,1)这个点被重复计算了)
最后再加上i=0,j=0的两个点
#include<cstdio>
using namespace std;
const int MAXN=1e6+10;
int prime[MAXN],phi[MAXN],vis[MAXN],tot=0;
int main(){
int N;
scanf("%d",&N);N=N-1;
if(N==0) {printf("0");return 0;}
phi[1]=1;
for (int i=2; i <= N ;i++)
{
if (!vis[i]) prime[++tot]=i,phi[i]=i-1;
for (int j=1; j<=tot && i*prime[j]<=N ;j++)
{
vis[ i*prime[j] ]=1;
if(i%prime[j]) phi[ i*prime[j] ] = phi[i] * (prime[j]-1);
else {phi[ i*prime[j] ] =phi[i] * prime[j];break;}
}
}
for(int i=1; i <= N; i++)
phi[i]=phi[i]+phi[i-1];
printf("%d",phi[N]*2+1);
return 0;
}
- 稳扎稳打JavaScript(一)——作用域链内存模型
- 稳扎稳打JavaScript(二)——图解对象内存模型
- Swift学习资源
- 稳扎稳打JavaScript(三)——创建对象的几种方式
- 快速教程:使用Cython来扩展Python/NumPy库
- 稳扎稳打JavaScript(四)——闭包
- JavaScript奇淫技巧(一)
- 动态规划法(四)——0/1背包问题
- 动态规划法(三)——最长公共子序列
- Python数据分析模块 | pandas做数据分析(三):统计相关函数
- 动态规划法(二)——弗洛伊德算法
- Python数据分析模块 | pandas做数据分析(二):常用预处理操作
- 贪心算法(一)——概述
- Python数据分析模块 | pandas做数据分析(一):基本数据对象
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- (较为详细)树的遍历方式一览(附完整源码可在VScode与cb运行)
- 【Java】12 Map 集合
- 【Java】11 Set 集合
- 4.表格-HTML基础
- 2.语义化-HTML进阶
- MATLAB 与 C 语言的混合编程
- leetcode树之二叉树的层平均值
- C++雾中风景15:聊聊让人抓狂的Name Mangling
- 【Java】15 File 类
- seaborn更高效的统计图表制作工具
- 牛客2019跨年AK场题解(一)
- qiankun proxySand 沙箱
- MATLAB 与 C 语言的混合编程实战之辛普森积分法、自适应辛普森积分
- Java那些事之JDK环境配置及集成开发环境Eclipse安装
- 敲代码、作诗、写论文无所不能?史上最大AI模型GPT-3霸榜Github