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 ...
随机推荐
- SQL 查询中case的运用
适用场景: 需要根据现有字段经过一定条件得到新的查询字段相关语法: CASE WHEN 条件1 TEHN 结果1 WHEN 条件2 THEN 结果2 ...... ELSE 结果N END 练习代码: ...
- 编译安装redis-5.0.4
编译安装为redis官方推荐安装方式. 本例中使用linux版本为:CentOS Linux release 7.0.1406 (Core),Basic Web Server 一.安装依赖包 yum ...
- mysql中将多行数据合并成一行数据
.1GROUP_CONCAT()中的值为你要合并的数据的字段名; SEPARATOR 函数是用来分隔这些要合并的数据的: ' '中是你要用哪个符号来分隔: 2.必须要用GROUP BY 语句来进行分组 ...
- Riemann流形上的梯度,散度与Laplace算子
今天(准确地说是昨天)被学物理的同学问到Stokes定理,想起来我还有一个知道但没有细看的东西,下面整理成提示完整的习题记录一下. 这部分内容将会加进几何学观止,敬请期待.目前正在纂写代数几何簇的部分 ...
- HashMap源码分析(基于jdk8)
我们知道在jdk7中HashMap的实现方式是数组+链表.而在jdk8中,实现有所变化,使用的是数组+链表+红黑树实现的. 当链表长度达到8时转化为红黑树. static final int TREE ...
- docker 容器的启动方式
1.Docker 优势: .更高效利用系统资源:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高.无论是应用执行速度.内存损耗或者文件存储速度,都要比传统 ...
- 如何在django视图中使用asyncio(协程)和ThreadPoolExecutor(多线程)
Django视图函数执行,不在主线程中,直接 loop = asyncio.new_event_loop() # 更不能loop = asyncio.get_event_loop() 会触发 Runt ...
- Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock32 error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"
今天安装完带图形界面的CentOS 7后,在Terminal中运行yum安装命令时报了以下错误: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
- web自动化框架如何设计
web自动化框架如何设计po模式总结: 1. 页面对象模型:当页面特别多的时候,代码更好的维护 2. Po是pageObject设计模式,用来管理和维护一组web元素的对象库 3. 每一个page c ...
- 文件上传XSS引发的安全问题
文件上传xss,一般都是上传html文件导致存储或者反射xss 一般后缀是html,之前疏忽了,没怎么考虑文件上传xss 如果没有 验证文件内容,却验证了后缀的情况下,使用: htm后缀: 测试代码: ...