AcWing 196. 质数距离(筛法+离散化)打卡
给定两个整数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. 质数距离(筛法+离散化)打卡的更多相关文章
- ACwing 196. 质数距离
#include <bits/stdc++.h> using namespace std; , M = ; int v[M]; long long prime[N],prim[N]; ; ...
- POJ2689 [质数距离] 题解
质数距离 题目TP门 题目描述 给定两个整数L和R,你需要在闭区间[L,R]内找到距离最接近的两个相邻质数C1和C2(即C2-C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对. 同时,你 ...
- AcWing 197. 阶乘分解 (筛法)打卡
给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pipi 和 cici 即可. 输入格式 一个整数N. 输出格式 N! 分解质因数后的结果,共若干行,每行一对pi, ...
- AcWing 868. 筛质数 线性筛法
#include <iostream> #include <algorithm> using namespace std; ; int primes[N], cnt; bool ...
- 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]) ...
- AcWing 最短Hamilton距离 (状压DP)
题目描述 给定一张 n 个点的带权无向图,点从 0∼n−1 标号,求起点 0 到终点 n−1 的最短 Hamilton 路径. Hamilton 路径的定义是从 0 到 n−1 不重不漏地经过每个点恰 ...
- [51nod1181]质数中的质数(素数筛法)
解题关键: 注意下标 #include<bits/stdc++.h> #define maxn 10000002 using namespace std; typedef long lon ...
- AcWing P173 矩阵距离 题解
Analysis 就是一个裸的广搜,每次从是1的点开始找就好啦~~~ #include<iostream> #include<cstdio> #include<cstri ...
- AcWing 142. 前缀统计 字典树打卡
给定N个字符串S1,S2…SNS1,S2…SN,接下来进行M次询问,每次询问给定一个字符串T,求S1S1-SNSN中有多少个字符串是T的前缀. 输入字符串的总长度不超过106106,仅包含小写字母. ...
随机推荐
- 微信小程序常用API组件开发
关于小程序 张小龙定义小程序: 1.不需要下载安装即可使用: 2.用完即走,不用关心是否安装太多应用: 3.应用无处不在,随时可用. 特点: 1.适合业务逻辑简单的应用: 2,.适合低频应用: 3.适 ...
- centos系统下安装MySQL5.7.18
1.首先安装依赖包 yum install -y gcc gcc-c++ ncurses-devel perl openssl-devel 最最重要的是,不要忘了安装openssl-devel 2.安 ...
- svn服务端安装、迁移教程、Eclipse切换svn连接库
svn服务端安装.迁移教程.Eclipse切换svn连接库 安装教程 1.下载svn服务端安装程序 2.运行程序,安装 这里端口号根据自己定义,避免与其他程序冲突 到这里就安装完成 迁移教程 这里举例 ...
- jquery实现回车键登录/搜索等确认功能
button按钮提交方式: $('#search').click(function() { get_table(); }); //keyCode=13是回车键,设置回车键提交 $("body ...
- STM32例程之USB HID双向数据传输(源码下载)【转】
程序功能 将STM32的USB枚举为HID设备. STM32使用3个端点,端点0用于枚举用,端点1和2用于数据的发送和接收. 端点长度为64,也就是单次最多可以传输64个字节数据. STM32获取上位 ...
- HTML5: HTML5 测验
ylbtech-HTML5: HTML5 测验 1.返回顶部 1. HTML5 测验 结果:15/5 1. HTML5 之前的 HTML 版本是什么? 你的回答: HTML 4.01 回答正确! 2. ...
- Oracle之Group by和Having-----转了
在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等.这些函数和其它函数的根本区别就是它们一般作用在多条 ...
- python学习笔记:数据类型——列表/数组(list)
Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素.通过下标访问列表中的元素(又称索引.角标),下标从0开始计数.list定义,使用中括号[]. l ...
- Java中使用File类删除文件夹和文件
删除工具类: import java.io.File; public class DeleteAll{ public static void deleteAll(File file){ if(file ...
- element UI datepicker组件限制可选日期范围
长话短说,简单粗暴上代码了,在element中的datepicker,可以自由选择日期,如下: 然后我们根据element 官网的文档,给datepicker组件动态改变 picker-options ...