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]仪仗队的更多相关文章

  1. BZOJ 2190: [SDOI2008]仪仗队

    2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2689  Solved: 1713[Submit][Statu ...

  2. BZOJ 2190: [SDOI2008]仪仗队( 欧拉函数 )

    假设C君为(0, 0), 则右上方为(n - 1, n - 1). 一个点(x, y) 能被看到的前提是gcd(x, y) = 1, 所以 answer = ∑ phi(i) * 2 + 2 - 1 ...

  3. P2158 [SDOI2008]仪仗队

    P2158 [SDOI2008]仪仗队图是关于y=x对称的,横纵坐标一定是互质的否则在之前就被扫过了,所以就可以用欧拉函数再*2就完了. #include<iostream> #inclu ...

  4. 洛谷 P2158 [SDOI2008]仪仗队 解题报告

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

  5. P2158/bzoj2190 [SDOI2008]仪仗队

    P2158 [SDOI2008]仪仗队 欧拉函数 计算下三角的点数再*2+1 观察斜率,自行体会 #include<iostream> #include<cstdio> #in ...

  6. P2158 [SDOI2008]仪仗队 && 欧拉函数

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

  7. [LuoguP2158][SDOI2008]仪仗队

    [LuoguP2158][SDOI2008]仪仗队(Link) 现在你有一个\(N \times N\)的矩阵,求你站在\((1,1)\)点能看到的点的总数. 很简洁的题面. 这道题看起来很难,但是稍 ...

  8. [SDOI2008]仪仗队 (洛谷P2158)

    洛谷题目链接:[SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视 ...

  9. bzoj 2190: [SDOI2008]仪仗队 线性欧拉函数

    2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 作为 ...

随机推荐

  1. SpringMVC、Zookeeper、Dubbo使用

    联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使前 ...

  2. 转:Yii 常量的轻松管理

    问题 我经常在不同的地方使用模型中的常量(基本状态常量),当常量改变时我不得不在使用每处它的代码中修改. 获取常量 为了解决这个问题我使用了一个方法 getConstants(). public st ...

  3. iOS 9之应用内搜索(CoreSpotlight)API

    金田(github 示例源码) 前言 在iOS9之前我们只能使用Spotlight来搜索应用名称来打开指定App,而其他的内容都是提供给系统使用(信息,联系人,邮件等).在iOS9以后Apple允许开 ...

  4. Jsp中response对象的所有属性

    所属接口:javax.servlet.http.HttpServletResponse,其父接口是ServletResponse,而且ServletResponse也现在只有唯一一个HttpServl ...

  5. 设置应用中出现NFC服务,去掉

    还可以在 里面修改

  6. Comprehensive learning path – Data Science in Python深入学习路径-使用python数据中学习

    http://blog.csdn.net/pipisorry/article/details/44245575 关于怎么学习python,并将python用于数据科学.数据分析.机器学习中的一篇非常好 ...

  7. sql中的case when

    sql语言中有没有类似C语言中的switch case的语句?? 没有,用case   when   来代替就行了.            例如,下面的语句显示中文年月         select ...

  8. Java基础知识强化49:10个实用的但偏执的Java编程技术

    1. 将String字符串放在最前面 为了防止偶发性的NullPointerException 异常,我们通常将String放置在equals()函数的左边来实现字符串比较,如下代码: // Bad ...

  9. jdk-tomcat环境变量设置

    1.export命令直接在shell下设置 export JAVA_HOME=/home/yn4a/jdk1.6.0_16export PATH=$JAVA_HOME/bin:$PATHexport ...

  10. HQL查询

    HQL ,Hibernate Query Language ,是Hibernate查询语言,不直接操作数据表,而是操作实体类,根据实体类和对应数据表中的映射关系,查找数据. 下面是hql的基本步骤: ...