0x31 prime distance(质数)
题目描述:
给定两个整数L和U,你需要在闭区间[L,U]内找到距离最接近的两个相邻质数C1和C2(即C2-C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对。
同时,你还需要找到距离最远的两个相邻质数D1和D2(即D1-D2是最大的),如果存在相同距离的其他相邻质数对,则输出第一对。
输入格式:
每行输入两个整数L和U,其中L和U的差值不会超过1000000。
输出格式:
对于每个L和U ,输出一个结果,结果占一行。
结果包括距离最近的相邻质数对和距离最远的相邻质数对。(具体格式参照样例)
如果L和U之间不存在质数对,则输出“There are no adjacent primes.”。
数据范围:
1≤L<U≤231-1,R-L≤106
输入样例:
2 17
14 17
输出样例:
2,3 are closest, 7,11 are most distant.
There are no adjacent primes.
思路:
①用筛法求出2~sqrt(R)之间的所有质数。
②标记i*p(ceil(L/p)≤i≤floor(R/p))。
③所有未标记的数就是[L,R]中的质数。对相邻的质数两两比较,找出差最大的。
时间复杂度:O(∑质数p≤sqrt(R)(R-L)/p)=O(sqrt(R)log log sqrt(R)+(R-L)log log R)。
代码如下:
#include<bits/stdc++.h>
#define N 1000000+10
#define M 100000+10
using namespace std;
int l,r,m;
int v[M],prime[M];
bool st[N];
void primes(int n){//线性筛质数
memset(v,,sizeof(v));
m=;
;i<=n;i++){
){
v[i]=i;
prime[++m]=i;
}
;j<=m;j++){
if(prime[j]>v[i]||prime[j]>n/i)break;
v[i*prime[j]]=prime[j];
}
}
}
int main(){
primes();//step 1
while(cin>>l>>r){
memset(st,true,sizeof(st));
)st[]=false;
;prime[i]<=sqrt(r);i++){
int p=prime[i];
int l1,r1;
)l1=l/p;
;
r1=floor(r/p);
,l1);j<=r1;j++)
st[j*p-l]=false;//step 2
}
,min2=-,max1=-,max2=-;
;
int before;
bool t=false;
;i<=r-l;i++){
if(!st[i])continue;
if(!t){
before=i;t=true;
}
else{
if(i-before>maxx){
max1=before;max2=i;
maxx=i-before;
}
if(i-before<minn){
min1=before;min2=i;
minn=i-before;
}
before=i;
}
}//step 3
)cout<<"There are no adjacent primes."<<endl;
else{
cout<<min1+l<<","<<min2+l<<" are closest, "
<<max1+l<<","<<max2+l<<" are most distant."<<endl;
}
}
;
}
0x31 prime distance(质数)的更多相关文章
- POJ2689 Prime Distance 质数筛选
题目大意 求区间[L, R]中距离最大和最小的两对相邻质数.R<2^31, R-L<1e6. 总体思路 本题数据很大.求sqrt(R)的所有质数,用这些质数乘以j, j+1, j+2... ...
- 一本通1619【例 1】Prime Distance
1619: [例 1]Prime Distance 题目描述 原题来自:Waterloo local,题面详见 POJ 2689 给定两个整数 L,R,求闭区间 [L,R] 中相邻两个质数差值最小的数 ...
- UVA10140 Prime Distance
UVA10140 Prime Distance 给定两个整数L,R(1<=L<=R<=2^{31},R-L<=10^6)L,R(1<=L<=R<=231,R− ...
- ZOJ 1842 Prime Distance(素数筛选法2次使用)
Prime Distance Time Limit: 2 Seconds Memory Limit: 65536 KB The branch of mathematics called nu ...
- 【题解】UVA10140 [Prime Distance]
[题解]UVA10140 Prime Distance 哈哈哈哈\(miller-rabbin\)水过去了哈哈哈 还能怎么办呢?\(miller-rabbin\)直接搞.枚举即可,还跑得飞快. 当然此 ...
- 数论 - 素数的运用 --- poj 2689 : Prime Distance
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12512 Accepted: 3340 D ...
- UVA 10140 - Prime Distance(数论)
10140 - Prime Distance 题目链接 题意:求[l,r]区间内近期和最远的素数对. 思路:素数打表,打到sqrt(Max)就可以,然后利用大的表去筛素数.因为[l, r]最多100W ...
- poj 2689 Prime Distance(大区间素数)
题目链接:poj 2689 Prime Distance 题意: 给你一个很大的区间(区间差不超过100w),让你找出这个区间的相邻最大和最小的两对素数 题解: 正向去找这个区间的素数会超时,我们考虑 ...
- [POJ268] Prime Distance(素数筛)
/* * 二次筛素数 * POJ268----Prime Distance(数论,素数筛) */ #include<cstdio> #include<vector> using ...
随机推荐
- JavaScript生成树形菜单(递归算法)
1.最终效果图(这里仅为实现算法,并加载至页面,不做任何css界面优化) 注释:本示例包含三级目录菜单,但实际上可支持N级(可使用该代码自行测试) 2.数据源 菜单信息一般来源于数据库中数据表,且为自 ...
- Qt在各平台上的搭建qt-everywhere(Qt for windows7-64bit, Ubuntu 12.04-32bit, 嵌入式x86平台, 嵌入式arm平台)
下载地址:http://download.qt.io/ 当进入解压好的源码包后,使用./configure –help命令,可以获得相应帮助,前面是*号的表示默认参数. +号表示该功能要求被评估,评估 ...
- qt在windows下的udp通信(最简单)
qt编程:windows下的udp通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:win7 开发环境:qt 功能: 用udp进行收发 ...
- Delphi子类调用祖父类的虚函数
因为看Delphi书的时候,就产生了疑惑.老讲调用父类虚函数,但是万一需要调用祖父虚函数怎么办?后来又经常在C++里看到,就更疑惑了 type TA = class procedure ShowMsg ...
- 浅谈stylus与sass的对比
all we konw , 这两个都是css的预编译工具,但虽然都是编译工具,但还是存在差别的,下面来讲讲其中的区别 1.变量 sass定义变量是以这种形式进行定义的$xxx:10;而stylus的定 ...
- 使用VS2012开发基于Office 2013的AddIn程序
默认VS2012开发的Office Add是基于2010的,如下所示: 如果你机器上安装的Office版本是2013,那么使用VS2012创建的工程是无法运行的,弹出如下的错误: 那么此时怎么办呢?将 ...
- maven项目或者SpringBoot项目启动时报错在本地仓库中找不到jar包的解决办法
经常遇到项目检出来后是导入开发工具eclipse中pom文件出错问题,项目启动时遇到了一些列的jar包找不到的问题,所以换个开发平台到IDEA以为会好些,结果同样的问题还是会出现的,为了找到具体的解决 ...
- C# 设计模式,工厂方法
C#工厂方法 using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...
- 分析RESTful API安全性及如何采取保护措施
本文中讨论了API安全性和采用安全措施的重要性,如身份验证,API密钥,访问控制和输入验证. API设计的第一步是撰写接口文档 根据TechTarget(海外IT专业媒体)的定义,RESTful AP ...
- redis安装与php安装redis模块
一.安装redis 1.下载 wget https://github.com/antirez/redis/archive/2.8.23.tar.gz 2.解压缩 tar -zxvf 2.8.23.ta ...