这题应该注意到与b2818的不同

一个点能被看见当且仅当它与(1,1)的横纵坐标的距离gcd为1

所以问题转化为x,y<=n-1,求gcd(x,y)=1的方案数

最后要加上2

代码:

 var i,n,tot:longint;
ans:int64;
phi:array[..] of int64;
p:array[..] of longint;
procedure get;
var i,j:longint;
begin
fillchar(phi,sizeof(phi),);
tot:=;
phi[]:=;
for i:= to n do
if phi[i]= then
begin
phi[i]:=i-;inc(tot);p[tot]:=i;
j:=i+i;
while j<=n do
begin
if phi[j]= then phi[j]:=j;
phi[j]:=(phi[j] div i)*(i-);
inc(j,i);
end;
end;
end;
procedure main;
begin
readln(n);dec(n);
get;
for i:= to n do inc(phi[i],phi[i-]);
writeln(*phi[n]+);
end;
begin
main;
end.

学了一种新的求欧拉函数的筛法——欧拉筛法

代码:

 var  i,n,tot:longint;
ans:int64;
fai:array[..] of int64;
p:array[..] of longint;
check:array[..] of boolean;
procedure getfai;
var i,j,k:longint;
begin
tot:=;
fillchar(check,sizeof(check),false);
for i:= to n do
begin
if not(check[i]) then
begin
inc(tot);
p[tot]:=i;
fai[i]:=i-;
end;
for j:= to tot do
begin
k:=i*p[j];
if k>n then break;
check[k]:=true;
if i mod p[j]= then
begin
fai[k]:=fai[i]*p[j];
break;
end
else
fai[k]:=fai[i]*(p[j]-);
end;
end;
end;
procedure main;
begin
readln(n);dec(n);
getfai;
for i:= to n do inc(fai[i],fai[i-]);
writeln(*fai[n]+);
end;
begin
main;
end.

又作了一个小优化,缩小了空间使用,去掉check数组,直接用fai是否为0来判断是否是质数

代码:

 var  i,n,tot:longint;
ans:int64;
fai:array[..] of int64;
p:array[..] of longint;
procedure getfai;
var i,j,k:longint;
begin
tot:=;
fillchar(fai,sizeof(fai),);
for i:= to n do
begin
if fai[i]= then
begin
inc(tot);
p[tot]:=i;
fai[i]:=i-;
end;
for j:= to tot do
begin
k:=i*p[j];
if k>n then break;
if i mod p[j]= then
begin
fai[k]:=fai[i]*p[j];
break;
end
else
fai[k]:=fai[i]*(p[j]-);
end;
end;
end;
procedure main;
begin
readln(n);dec(n);
getfai;
for i:= to n do inc(fai[i],fai[i-]);
writeln(*fai[n]+);
end;
begin
main;
end.

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. 2W/月和1W/月的工作,你会怎么选?

    只看标题的话,肯定有不少人会选择月薪 2W 的工作,很明显,钱多嘛!但实际上,这里是有前提的,完整的问题如下: 一份月薪 2W,但加班无底线,基本没有自由时间的工作,和一份月薪 1W,但正常工作时长, ...

  2. CentOS6.5下 yum安装LAMP

    CentOS下yum安装LAMP   1. 用yum安装Apache,Mysql,PHP. 1.1安装Apache yum install httpd httpd-devel 安装完成后,用/etc/ ...

  3. CCNP第四天 OSPF综合实验(1)

    ospf综合实验(1) 本实验主要考察ospf中的接口上的多种工作方式 实验如图所示: 所用拓扑为CCNP标准版,如图: --------------------------------------- ...

  4. 如何在eclipse中配置Selenium

    1, Install python 33.(Python 27也可以) 2, Setup Selenium If you did not install Easy_install module, yo ...

  5. 【学习总结】整理一下int, NSInteger 等概念

    基本需要知道的 : unsigned : 没符号的 signed  : 有符号的 int : 整型 看看OC的定义 : #if __LP64__ || (TARGET_OS_EMBEDDED & ...

  6. MyBatis学习笔记之resultMap

    使用mybatis不能不说的是resultMap 相比resultClass来说resultMap可以适应更复杂的关系映射,允许指定字段的数据类型,支持“select *” ,并不要求定义 Resul ...

  7. sql中的inner join, left join, right join的区别

    下面介绍一下 inner join, left join, right join这者之间的区别 现在我假设有A表和B表 left join select * from A a left join B ...

  8. 用火狐打开PDF文件

    可以直接使用官方的Adobe Reader插件来实现在火狐中浏览PDF文件的功能.在你浏览一个PDF文件的时候,火狐将会尝试下载安装这个插件. 如果这个插件出现问题,那么就无计可施啦. 检查火狐的设置 ...

  9. (转)inux Read系统调用

    转载网址:http://my.oschina.net/haomcu/blog/468656 1. 什么是系统调用 2. read系统调用在内核空间的处理层次模型 3. 相关的内核数据结构 4. rea ...

  10. Samza在YARN上的启动过程 =》 之二 submitApplication

    首先,来看怎么构造一个org.apache.hadoop.yarn.client.api.YarnClient class ClientHelper(conf: Configuration) exte ...