BZOJ 2190:[SDOI2008]仪仗队(欧拉函数)
2024-08-28 15:04:33
[SDOI2008]仪仗队
Description
作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。现在,C君希望你告诉他队伍整齐时能看到的学生人数。
Input
共一个数N。
Output
共一个数,即C君应看到的学生人数。
Sample Input
4
Sample Output
9
HINT
【数据规模和约定】 对于 100% 的数据,1 ≤ N ≤ 40000
分析:
平面直角坐标系上的线段(且两端点为整点),其包含的整点(不包括两端点)数为gcd(|x1-x2|,|y1-y2|)-1,其中当重合时要特判。
知道上面这个这题就好做了,对于这一题,我们先要求得符合gcd(x-1,y-1) 1<=x,y<=n 的点对的个数,
产生欧拉函数表,将1~n-1的欧拉函数值加起来再乘2,相当于知道了所有2<=x,y<=n区间中能看到的点个数,然而别忘了x=1,y=1时各能看到一个点,也就是竖直方向一个,横轴方向一个,所以结果要加2,但由于统计euler表值时会将(2,2)的点对重复计算(e[1]=1,乘2后相当于多加了一次),故要减1
代码:
program asdf;
var
e:array[..]of int64;
n,i:longint; ans:int64;
procedure work;
var i,j:longint;
begin
for i:= to n do e[i]:=i;
for i:= to n do
if e[i]=i then
begin j:=i;
while j<=n do begin e[j]:=e[j] div i*(i-); inc(j,i); end;
end;
end;
begin
readln(n);
work;
for i:= to n- do inc(ans,e[i]);
writeln(ans*+);
end.
最新文章
- 《HelloGitHub月刊》第06期
- Struts2 Action中的方法命名不要以get开头
- apache磁盘缓存配置
- MVC与WebForm的一些区别
- oracle数据库创建表空间和表临时空间
- Redhat Enterprise Linux 6.4图形界面的中文问题
- BZOJ 1022 小约翰的游戏 (Anti-Nim游戏)
- VM虚拟机安装centos,同网段,局域网能访问
- UESTC 1599 wtmsb【优先队列+排序】
- SAP BAPI创建批次 为保存内部对象号
- mongoDB 其他数据类型
- Spring重要知识点整理
- 开源医学图像处理平台NiftyNet介绍
- Docker命令详解(build篇)
- pygame经典sprite精灵类
- servlet配置及其生命周期
- 代码 | 自适应大邻域搜索系列之(4) - Solution定义和管理的代码实现解析
- 修改多渠道打包的App名
- Linux实战教学笔记46:NoSQL数据库之redis持久化存储 (二)
- python基础之递归,匿名,内置函数
热门文章
- Codeforces Round #327 590B Chip &#39;n Dale Rescue Rangers(等效转换,二分)
- tensorflow构建CNN模型时的常用接口函数
- 安装Ubuntu桌面环境后只能Guest登录的解决办法
- 谷歌SwitchySharp &;&; SwitchyOmega插件
- XGBoost算法原理小结
- ipynb-->;pdf
- 自己写一个Promise
- SummerVocation_Learning--java的String 类
- 安装配置mysql图文步骤以及配置mysql的环境变量的步骤
- tp3.2读取time()格式遇到的的问题(尚未解决)