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

现在,C君希望你告诉他队伍整齐时能看到的学生人数。
输入输出格式
输入格式:
共一个数N
输出格式:
共一个数,即C君应看到的学生人数。
输入输出样例
输入样例#1:
4
输出样例#1:
9
说明
【数据规模和约定】
对于 100% 的数据,1 ≤ N ≤ 40000
【题解】:
欧拉函数只对正整数有意义,对于phi(n),表示的是小于n的并且与n互质的正整数个数,通式:
phi(n)=n(1-1/p1)(1-1/p2)……(1-1/pm)
其中p1,p2,……,pm表示n的质因数(但不会重复出现,即p1!=p2!=……!=pm,比如phi(18)=18(1-1/2)(1-1/3))
这道题里面假设以观察者为原点,可以发现他能看到的人符合下面的两个特点:
1.要么是特殊值((1,0),(1,1),,(0,1)),要么横纵坐标互质
2.看到的人关于y=x对称
所以我们可以对2~n-1求欧拉函数,将所得值相加,就表示除了三个特殊点以外在y=x的某一侧上的可见点(具体原因建议你们意会一下画图)
然后假设得到的值是ans,则最终答案为ans*2+3
【AC代码】:
#include<iostream>
#include<cstdio>
using namespace std;
/*int phi(int n){//
int k=2;
double res=n;
for(;n>1;k++){
if(n%k) continue;
while(!(n%k)) n/=k;
res*=(1.0-1.0/(double)k);
}
return res;
}*/
//BZOJ有毛病,上面的codevs,洛谷都过了,就是BZOJ..
//WA到挺phi换姿势
int phi(int n){
int ans=n;
if(n&^){
while(n&^) n>>=;
ans>>=;
}
for(int i=;i*i<=n;i+=){
if(n%i==){
while(n%i==) n/=i;
ans=ans/i*(i-);
}
}
if(n>) ans=ans/n*(n-);
return ans;
}
int main(){
int n;scanf("%d",&n);
int ans=;
for(int i=;i<n;i++) ans+=phi(i);
printf("%d",ans*+);
return ;
}
--------------------------
源WA代码修改版(WA原因:1.0-1.0/(double)k有精度问题)
---------------------------
#include<iostream>
#include<cstdio>
using namespace std;
int phi(int p){
int phi=p;
for(int i=;i*i<=p;i++){
if(!(p%i)){
phi=phi-phi/i;
while(!(p%i)) p/=i;
}
}
if(p>) phi=phi-phi/p;
return phi;
}
int main(){
int n;scanf("%d",&n);
if(n==){puts("");return ;}
int ans=;
for(int i=;i<n;i++) ans+=phi(i);
printf("%d",ans*+);
return ;
}
[SDOI2008]仪仗队的更多相关文章
- BZOJ 2190: [SDOI2008]仪仗队
2190: [SDOI2008]仪仗队 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2689 Solved: 1713[Submit][Statu ...
- BZOJ 2190: [SDOI2008]仪仗队( 欧拉函数 )
假设C君为(0, 0), 则右上方为(n - 1, n - 1). 一个点(x, y) 能被看到的前提是gcd(x, y) = 1, 所以 answer = ∑ phi(i) * 2 + 2 - 1 ...
- P2158 [SDOI2008]仪仗队
P2158 [SDOI2008]仪仗队图是关于y=x对称的,横纵坐标一定是互质的否则在之前就被扫过了,所以就可以用欧拉函数再*2就完了. #include<iostream> #inclu ...
- 洛谷 P2158 [SDOI2008]仪仗队 解题报告
P2158 [SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线 ...
- P2158/bzoj2190 [SDOI2008]仪仗队
P2158 [SDOI2008]仪仗队 欧拉函数 计算下三角的点数再*2+1 观察斜率,自行体会 #include<iostream> #include<cstdio> #in ...
- P2158 [SDOI2008]仪仗队 && 欧拉函数
P2158 [SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线 ...
- [LuoguP2158][SDOI2008]仪仗队
[LuoguP2158][SDOI2008]仪仗队(Link) 现在你有一个\(N \times N\)的矩阵,求你站在\((1,1)\)点能看到的点的总数. 很简洁的题面. 这道题看起来很难,但是稍 ...
- [SDOI2008]仪仗队 (洛谷P2158)
洛谷题目链接:[SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视 ...
- bzoj 2190: [SDOI2008]仪仗队 线性欧拉函数
2190: [SDOI2008]仪仗队 Time Limit: 10 Sec Memory Limit: 259 MB[Submit][Status][Discuss] Description 作为 ...
随机推荐
- Altium Designer 09 (Protel)总线使用方法(解决导入PCB无网络标号问题)
弄了两天的Protel总线问题终于解决了,一开始顶层总线连接好后,导入PCB没有网络标号,也就是两个子图信号没连上.现在将正确的连接和设置方法公布如下: 1.首先画好子图的总线,如下图所示.注意:中括 ...
- Qt编程之Qt样例表(QSS)
For a long time, Qt has allowed you to decorate your GUIs with CSS’ish style sheets. Inspired by the ...
- 安卓应用使用QQ登录的申请流程
“QQ互联”是腾讯为第三方网站.媒体.终端提供的开放平台.QQ互联拥有8个组件,提供诸如分享.登陆.like.qq提醒等能力.开发者使用QQ帐号登陆组件可以降低了用户的注册门槛,减少注册环节的用户流失 ...
- 实现QQslidingMenu侧滑效果学习笔记
声明:只是自己的学习笔记,所以,只作为博友的参考,不喜勿喷 实现思路: 自定义继承HorizontalScrollView的控件 项目github地址: https://github.com/ysno ...
- CROW-5 WEB APP引擎商业计划书(HTML5方向)-微信网页版微信公众平台登录-水仙谷
CROW-5 WEB APP引擎商业计划书(HTML5方向)-微信网页版微信公众平台登录-水仙谷 CROW-5 WEB APP引擎商业计划书(HTML5方向)
- CentOS下MySQL无法正常启动错误
一.非正常关机/退出MySQL时报错:/var/lib/mysql/mysql.sock 1.重启机器:shutdown -h now 2.删除或重命名:rm -r /var/lib/mysql/my ...
- pic_for_youdao
- js中的函数,Date对象,Math对象和数组对象
函数就是完成某个功能的一组语句,js中的函数由关键字 function + 函数名 + 一组参数定义;函数在定义后可以被重复调用,通常将常用的功能写成一个函数,利用函数可以使代码的组织结构更多清晰. ...
- JavaScript 定义类
ES6以前: function Point(x, y) { this.x = x; this.y = y; } Point.prototype.hello= function () { return ...
- 关于url路径的定义方式
一.概述 无论是做网页,还是WEB系统,我们都会用到链接,图片,文件的地方,这些地方都涉及到路径的问题,例如:background-image:url();这一CSS样式,而url()的定义方式有两种 ...