这题应该注意到与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. 详解Javascript中的Array对象

    基础介绍 创建数组 和Object对象一样,创建Array也有2种方式:构造函数.字面量法. 构造函数创建 使用构造函数的方式可以通过new关键字来声明,如下所示: 12 var arr = new ...

  2. Oracle分析函数 — rank, dense_rank, row_number用法

    本文通过例子演示了Oracle分析函数 —— rank, dense_rank, row_number的用法. //首先建score表 create table score( course   nva ...

  3. 【ibatis】cachemodel、属性 及特殊配置

    http://www.cnblogs.com/13590/archive/2013/03/01/2938126.html <?xml version="1.0" encodi ...

  4. oc 中四种实例变量的范围类型@private@protected@public@package

    To enforce the ability of an object to hide its data, the compiler limits the scope of instance vari ...

  5. $.post()返回数据正常,但不执行success回调函数

    今天遇到一特郁闷的问题,如题:$.post()返回数据正常,但不执行success回调函数.说它郁闷是因为没毕业之前就遇到过解决了,却没有记录下来,导致卡了一下午. 像这样,post返回数据正常,但却 ...

  6. NSFileManager 沙盒文件管理

    文件夹创建,复制,移动,删除,检查是否存在,代码如下: 1.获取沙盒 document 路径,作为文件夹路径的基路径. NSString *document = NSSearchPathForDire ...

  7. Buffer

    Buffer 我们用原有 IO 读写文件应该不会陌生了,顺带回顾一下,大致两种: 1. 在 InputStream 或 OutputStream 上读写字节或字节数组,读 InputStream 时用 ...

  8. ByteBuffer的allocate和allocateDirect区别

    ByteBuffer的allocate和allocateDirect区别 在Java中当我们要对数据进行更底层的操作时,通常是操作数据的字节(byte)形式,这时常常会用到ByteBuffer这样一个 ...

  9. uva 125

    floyd 算法   如果存在无数条路  则存在a->a的路  a->b的路径数等于 a->i 和 i->b(0=<i<=_max) 路径数的乘积和 #includ ...

  10. struts2 权限拦截器 拦截没有登陆的请求

    假设有这样的登陆: ActionContext.getContext().getSession().put("UserMsg", userMsg); 则可以这样判断是否登陆: im ...