给定两个整数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−11≤L<U≤231−1

输入样例:

2 17
14 17

输出样例:

2,3 are closest, 7,11 are most distant.
There are no adjacent primes.
题意:找到给定范围内相邻质数最大和最小的质数对
思路:给定的l,r的范围都达到了1e9,我们直接筛法存不了这么大,但是他的r-l<=1e6,这个时候我们就应该有数学上的抓关键词分析的想法,从这下手
我们可以知道,每个合数肯定是由一个不大于sqrt(n)的素数和一个数的乘积化来的,那么我们就可以求出1-sqrt(r)的素数然后枚举素数再用筛法分别乘以一个数
达到的数说明就是一个合数,没有被乘到标记的说明就是素数
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+,M=1e6+;
ll prime[N],a[N];
int p[M];
int zs(int n)//判定质数
{
memset(prime,,sizeof(prime));
memset(a,,sizeof(a));
for(int i=;i<=n;i++)
{
if (!prime[i])
a[++a[]]=i;
for(int j=i;j<=n/i;j++)
prime[i*j]=;
}
}
int main()
{
int l,r;
while(cin>>l>>r)
{
zs(sqrt(r));
memset(p,,sizeof(p));
if (l==)//1要特判啊
p[]=;
for(int i=;i<=a[];i++)
{
for(int j=ceil(l/a[i]);j<=floor(r/a[i]);j++)//celi为向上取整,floor为向下取整.
if (j!=)
p[a[i]*j-l]=;//统一减去l
}
int as=,max_ans=,min_ans=1e9;
pair<int,int> ans_a,ans_b;
for(int i=l;i<=r;i++)
if (!p[i-l])
{
if (as)
{
if (max_ans<i-as)
{
ans_a.first=as;
ans_a.second=i;
max_ans=i-as;
}
if (min_ans>i-as)
{
ans_b.first=as;
ans_b.second=i;
min_ans=i-as;
}
}
as=i;
}
if (max_ans== && min_ans==1e9)
printf("There are no adjacent primes.\n");//没有素数
else
printf("%d,%d are closest, %d,%d are most distant.\n",ans_b.first,ans_b.second,ans_a.first,ans_a.second);
}
}
 

AcWing 196. 质数距离(筛法+离散化)打卡的更多相关文章

  1. ACwing 196. 质数距离

    #include <bits/stdc++.h> using namespace std; , M = ; int v[M]; long long prime[N],prim[N]; ; ...

  2. POJ2689 [质数距离] 题解

    质数距离 题目TP门 题目描述 给定两个整数L和R,你需要在闭区间[L,R]内找到距离最接近的两个相邻质数C1和C2(即C2-C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对. 同时,你 ...

  3. AcWing 197. 阶乘分解 (筛法)打卡

    给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pipi 和 cici 即可. 输入格式 一个整数N. 输出格式 N! 分解质因数后的结果,共若干行,每行一对pi, ...

  4. AcWing 868. 筛质数 线性筛法

    #include <iostream> #include <algorithm> using namespace std; ; int primes[N], cnt; bool ...

  5. acwing 173. 矩阵距离(bfs)

    给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])=|i−k|+|j−l|dist(A[i][j],A[k][l]) ...

  6. AcWing 最短Hamilton距离 (状压DP)

    题目描述 给定一张 n 个点的带权无向图,点从 0∼n−1 标号,求起点 0 到终点 n−1 的最短 Hamilton 路径. Hamilton 路径的定义是从 0 到 n−1 不重不漏地经过每个点恰 ...

  7. [51nod1181]质数中的质数(素数筛法)

    解题关键: 注意下标 #include<bits/stdc++.h> #define maxn 10000002 using namespace std; typedef long lon ...

  8. AcWing P173 矩阵距离 题解

    Analysis 就是一个裸的广搜,每次从是1的点开始找就好啦~~~ #include<iostream> #include<cstdio> #include<cstri ...

  9. AcWing 142. 前缀统计 字典树打卡

    给定N个字符串S1,S2…SNS1,S2…SN,接下来进行M次询问,每次询问给定一个字符串T,求S1S1-SNSN中有多少个字符串是T的前缀. 输入字符串的总长度不超过106106,仅包含小写字母. ...

随机推荐

  1. linux基础(六)

    今天我们来看一下Samba服务和nginx服务. Samba服务 1.samba的功能 samba是一个网络服务器,用于Linux和Windows之间共享文件. 2.samba服务的启动.停止.重启  ...

  2. bzoj 3011

    传送门: http://www.lydsy.com/JudgeOnline/problem.php?id=3011 一想到这个第一反应是树形dp,然后10^18 (' '    ) 所以我直接搞了一个 ...

  3. 【Flutter学习】页面布局之基础布局组件

    一,概述 Flutter中拥有30多种预定义的布局widget,常用的有Container.Padding.Center.Flex.Row.Colum.ListView.GridView.按照< ...

  4. 常用跨域方法总结(2)——CORS

    常用跨域方法总结(2)--CORS 上篇文章介绍了几种常用的跨域方法:常用跨域方法总结,本片为上一篇的补充,对比较重要的Cross Origin Resource Sharing详细介绍. CORS ...

  5. php环境搭建以及优化

    WampServer 配置伪静态 httpd.conf文件 搜索找到“LoadModule rewrite_module modules/mod_rewrite.so”这一行,去掉前面的“#”: 搜索 ...

  6. 建立一个更高级别的查询 API:正确使用Django ORM 的方式

    https://www.oschina.net/translate/higher-level-query-api-django-orm

  7. 用Processing生成屏保(二)

    代码 1: class TPoint 2: { 3: public TPoint(int _x, int _y) { 4: super(); 5: this._x = _x; 6: this._y = ...

  8. 使用jmeter做接口测试----柠檬不萌!

    一.乱码解决方案 1.jmeter查看结果树乱码 (1)在jmeter的bin目录下找到jmeter.properties这个文件,添加上 sampleresult.default.encoding= ...

  9. mysqldump备份和恢复

    一.备份单个数据库 1.备份命令:mysqldump MySQL数据库自带的一个很好用的备份命令.是逻辑备份,导出 的是SQL语句.也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备 ...

  10. DB2命令行查看执行计划

    查看对应SQL的执行计划 分析程序包   db2expln -d 数据库名 -i -g -c 模式名-p程序包 -s 0 -t   db2expln -d 数据库名 -i -g -c 模式名-p程序包 ...