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 ...
随机推荐
- MyBatis学习日记(二): MyBatis Say Hello
首先在Eclipse中创建一个maven工程: 在maven工程下的pom.xml文件中添加MyBatis.MySQL.Junit依赖: <project xmlns="http:// ...
- Mongo C# Driver 聚合使用---深入浅出
聚合查询结构体系 我们都知道Mongo中聚合是由$match,$project等聚合项组成,所以在C# Driver中具有两种类型:聚合管道(PipelineDefinition)和聚合管道项(I ...
- 爬取5K分辨率超清唯美壁纸
目录 爬取5K分辨率超清唯美壁纸 简介 编写思路 使用教程 演示图片 完整源代码 @ 爬取5K分辨率超清唯美壁纸 简介 壁纸的选择其实很大程度上能看出电脑主人的内心世界,有的人喜欢风景,有的人喜欢星空 ...
- css基本介绍
目录 CSS初识 构造规则 注意 样式表的定义和使用 行内式(内联样式) 内部样式表 外部样式表(外链式) 选择器 标签选择器(元素选择器) 类选择器 id选择器 通配符选择器 伪类选择器 链接伪类选 ...
- lazyMan
class Lazyman { constructor() { this.tasks = []; this.init(); } init() { const task = () => { con ...
- open live writer 测试
什么是Hash表 1.定义 Hash(散列/哈希),就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散 ...
- position: fixed; ios 无法滑动解决
添加以下代码搞定 -webkit-overflow-scrolling: touch; overflow-y: scroll;
- const命令
一.基本用法 声明一个只读的常量,这个值不会变. const声明常量与let一样,不可重复声明. 二.本质(我困惑的地方) const实际上保证的并不是变量的值不可以改动,而是变量指向的内存地址不可改 ...
- bugku web web3
flag就在这里快来找找吧http://123.206.87.240:8002/web3/ 点进去这个页面可以看到不断地有提示 flag就在这里 来找找吧 那就找一找哇 在source中可以找到一行注 ...
- PAT 甲级真题题解(1-62)
准备每天刷两题PAT真题.(一句话题解) 1001 A+B Format 模拟输出,注意格式 #include <cstdio> #include <cstring> #in ...