poj2689 Prime Distance题解报告
【题目大意】
给定一个区间[L,R],求区间内的质数相邻两个距离最大和最小的。
【思路分析】
其实很简单呀,很明显可以看出来是数论题,有关于质数的知识。
要注意一下的就是L和R的数据范围都很大,所以直接跑出1~R的所有质数是不可能的,于是我们就要想办法cut掉一些时间了
然后发现跑出1~
的所有质数是不会超时的,接下来就好办了,直接用这些质数去标记出[L,R]区间内的合数,这样就可以在规定时间内得到[L,R]区间内的质数了,把相邻两质数相减再比较一下就可以得出答案啦QWQ
【代码实现】
这里要说一个问题就是我也不知道为什么我打的代码会TLE掉,虽然我真的jio得和标程没啥差别,所以就一起放上来吧,要是有dalao发现了我的代码问题出在哪里麻烦告知O(∩_∩)O谢谢啦
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[],b[];
bool v[];
int n,m,i,j,t1,t2,x1,x2,y1,y2,l,r;
void prime(){//预处理:埃氏筛法筛素数
memset(v,,sizeof(v));//初始值都是1,即一开始假设所有的都是质数
for(i=;i<=;i++)
if(v[i]){//如果这个数没有被标记过,就说明是质数
a[++n]=i;//记录质数
for(j=;j<=/i;j++) v[i*j]=false;
//把这个质数的倍数都标记为合数
}
}
int main(){
prime();
while(cin>>l>>r){
memset(v,,sizeof(v));
if(l==) v[]=false;//如果没有这一步的话1会被当做质数处理
for(i=;i<=n;i++)
for(j=l/a[i];j<=r/a[i];j++)
if(j>) v[a[i]*j-l]=false;
m=;
for(i=l;i<=r;i++){
if(v[i-l]) b[++m]=i;
if(i==r) break;
}
t1=;t2=;
for(i=;i<m;i++){
j=b[i+]-b[i];
if(j<t1) {t1=j;x1=b[i];y1=b[i+];}
if(j>t2) {t2=j;x2=b[i];y2=b[i+];}
}
if(!t2) printf("There are no adjacent primes.\n");
else printf("%d,%d are closest, %d,%d are most distant.\n",x1,y1,x2,y2);
}
return ;
}
介个是std
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define go(i,a,b) for(register int i=a;i<=b;i++)
using namespace std;
int L,R;
int prime[];
int v[];
bool prim[];
int l,r,maxn=,maxl,maxr,minn=1e6+,minl,minr;
int main(){
int mid=;
int num=;
go(i,,mid){//这里我用的线性筛,和std不同
//但是线性筛不应该比埃氏要快吗?QAQ
if(v[i]==){
v[i]=i;prime[++num]=i;
go(j,,num){
if(prime[j]>v[i]||prime[j]>mid/i) break;
v[i*prime[j]]=prime[j];
}
}
}
/*go(i,2,mid){
if(v[i]==0){
prime[++num]=i;
go(j,2,mid/i) v[i*j]=1;
}
}*/
while(cin>>L>>R){
memset(prim,,sizeof(prim));
maxn=,minn=1e6+,l=r=;
if(L==) prim[]=;
go(i,,num)
go(j,,R/prime[i]){
if(j*prime[i]<L) continue;
prim[j*prime[i]-L]=;
}
int tot=;
go(i,,R-L){
if(prim[i]) {continue;}
if(l==){l=i+L;tot=;continue;}
r=i+L;tot++;
if(r-l>maxn) maxn=r-l,maxl=l,maxr=r;
if(r-l<minn) minn=r-l,minl=l,minr=r;
l=r;
}
if(tot<) {printf("There are no adjacent primes.\n");}
else printf("%d,%d are closest, %d,%d are most distant.\n",minl,minr,maxl,maxr);
}
return ;
}
介个是我的TLE代码
poj2689 Prime Distance题解报告的更多相关文章
- 解题报告:poj2689 Prime Distance
2017-10-03 11:29:20 writer:pprp 来源:kuangbin模板 从已经筛选好的素数中筛选出规定区间的素数 /* *prime DIstance *给出一个区间[L,U],找 ...
- POJ2689 Prime Distance(数论:素数筛选模板)
题目链接:传送门 题目: Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: Accepted: Des ...
- POJ-2689 Prime Distance (两重筛素数,区间平移)
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13961 Accepted: 3725 D ...
- POJ-2689 Prime Distance,区间素数筛法
Prime Distance 只会埃氏筛法的弱鸡今天读了读挑战程序设计120页,明白了求小区间内素数的方 ...
- POJ2689:Prime Distance——题解
http://poj.org/problem?id=2689 题目大意,给不超过int的l,r,其中r-l+1<=1000000,筛出其中的素数,并且求出相邻素数差值最大和最小的一对. ———— ...
- POJ2689 - Prime Distance(素数筛选)
题目大意 给定两个数L和U,要求你求出在区间[L, U] 内所有素数中,相邻两个素数差值最小的两个素数C1和C2以及相邻两个素数差值最大的两个素数D1和D2,并且L-U<1,000,000 题解 ...
- POJ2689:Prime Distance(大数区间素数筛)
The branch of mathematics called number theory is about properties of numbers. One of the areas that ...
- POJ2689 Prime Distance 质数筛选
题目大意 求区间[L, R]中距离最大和最小的两对相邻质数.R<2^31, R-L<1e6. 总体思路 本题数据很大.求sqrt(R)的所有质数,用这些质数乘以j, j+1, j+2... ...
- poj2689 Prime Distance(素数区间筛法)
题目链接:http://poj.org/problem?id=2689 题目大意:输入两个数L和U(1<=L<U<=2 147 483 647),要找出两个相邻素数C1和C2(L&l ...
随机推荐
- AI 学习路线
[导读] 本文由知名开源平台,AI技术平台以及领域专家:Datawhale,ApacheCN,AI有道和黄海广博士联合整理贡献,内容涵盖AI入门基础知识.数据分析挖掘.机器学习.深度学习.强化学习.前 ...
- Linux:Day20(上) openssh和CA
ssh:secure shell protocol,22/tcp,安全的远程登陆 OpenSSH:ssh协议的开源实现: dripbear:另一个开源实现: SSH协议版本 v1:基于CRC-32做M ...
- Neutron:Firewall as a Service(FWaaS)
用户可以用它来创建和管理防火墙,在 subnet 的边界上对 layer 3 和 layer 4 的流量进行过滤. 传统网络中的防火墙一般放在网关上,用来控制子网之间的访问. FWaaS 的原理也 ...
- Docker 核心技术之容器与镜像
Docker容器与镜像的关系 容器提交 – docker commit docker commit -h 作用: 根据容器生成一个新的镜像 命令格式: docker commit [OPTIONS] ...
- WebApi(五)-Swagger接口文档①简单集成
1,通过NuGet引用Swashbuckle 2,打开项目属性-->生成,勾选XML文档文件,保存 3,找到项目App_Start文件夹下WebApiConfig查找GetXmlComments ...
- WEB工具类
import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; ...
- SpringCloud---熔断降级理解、Hystrix实战(五)
SpringCloud---熔断降级理解.Hystrix实战(五) https://www.cnblogs.com/qdhxhz/p/9581440.html https://blog.csdn.ne ...
- 龙光集团地产跃居“中国房地产500强TOP28”
3月20日,由中国房地产业协会.上海易居房地产研究院中国房地产测评中心联合主办的2019中国房地产500强测评成果发布会在北京成功举办.本次测评成果显示,龙光集团地产凭借综合实力,不仅成功跻身“中国房 ...
- hdu-4612(无向图缩点+树的直径)
题意:给你n个点和m条边的无向图,问你如果多加一条边的话,那么这个图最少的桥是什么 解题思路:无向图缩点和树的直径,用并查集缩点: #include<iostream> #include& ...
- Flask 构建微电影视频网站(七)
电影模块实现 上映预告 @home.route("/animation/") def animation(): """ 首页轮播动画 "&q ...