Acwing-196-质数距离(素数区间筛法)
链接:
https://www.acwing.com/problem/content/198/
题意:
给定两个整数L和U,你需要在闭区间[L,U]内找到距离最接近的两个相邻质数C1和C2(即C2-C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对。
同时,你还需要找到距离最远的两个相邻质数D1和D2(即D1-D2是最大的),如果存在相同距离的其他相邻质数对,则输出第一对。
思路:
筛除,l-r中的素数, 使用区间筛法, 先筛出1-sqrt(r), 再筛l-r.
记录l-r的素数,挨个判断.
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN = 1e6+10;
int IsPri1[MAXN], IsPri2[MAXN];
LL Pri[MAXN], Res[MAXN];
LL l, r;
int pos;
void Euler()
{
memset(IsPri1, 0, sizeof(IsPri1));
memset(IsPri2, 0, sizeof(IsPri2));
pos = 0;
for (int i = 2;i <= sqrt(r);i++)
{
if (IsPri1[i] == 0)
Pri[++pos] = i;
for (int j = 1;j <= pos && Pri[j]*i <= sqrt(r);j++)
{
IsPri1[Pri[j]*i] = 1;
if (i%Pri[j] == 0)
break;
}
}
for (int i = 1;i <= pos;i++)
{
for (LL j = max(2LL, (0LL+l+Pri[i]-1)/Pri[i])*Pri[i];j <= r;j += Pri[i])
IsPri2[j-l+1] = 1;
}
}
int main()
{
while (~scanf("%lld%lld", &l, &r))
{
Euler();
int cnt = 0;
int sl, sr, bl, br;
int sv = 1e9, bv = 0;
if (l == 1)
IsPri2[l] = 1;
for (int i = 1;i <= r-l+1;i++)
{
if (IsPri2[i] == 0)
Res[++cnt] = i+l-1;
}
if (cnt < 2)
printf("There are no adjacent primes.\n");
else
{
for (int i = 1;i < cnt;i++)
{
if (Res[i+1]-Res[i] < sv)
{
sv = Res[i+1]-Res[i];
sl = Res[i], sr = Res[i+1];
}
if (Res[i+1]-Res[i] > bv)
{
bv = Res[i+1]-Res[i];
bl = Res[i], br = Res[i+1];
}
}
printf("%d,%d are closest, %d,%d are most distant.\n", sl, sr, bl, br);
}
}
return 0;
}
Acwing-196-质数距离(素数区间筛法)的更多相关文章
- AcWing 196. 质数距离(筛法+离散化)打卡
给定两个整数L和U,你需要在闭区间[L,U]内找到距离最接近的两个相邻质数C1和C2(即C2-C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对. 同时,你还需要找到距离最远的两个相邻质数 ...
- ACwing 196. 质数距离
#include <bits/stdc++.h> using namespace std; , M = ; int v[M]; long long prime[N],prim[N]; ; ...
- POJ-2689-Prime Distance(素数区间筛法)
链接: https://vjudge.net/problem/POJ-2689 题意: The branch of mathematics called number theory is about ...
- poj2689(素数区间筛法模板)
题目链接: http://poj.org/problem?id=2689 题意: 给出一个区间 [l, r] 求其中相邻的距离最近和最远的素数对 . 其中 1 <= l < r < ...
- poj2689 Prime Distance(素数区间筛法)
题目链接:http://poj.org/problem?id=2689 题目大意:输入两个数L和U(1<=L<U<=2 147 483 647),要找出两个相邻素数C1和C2(L&l ...
- POJ2689 [质数距离] 题解
质数距离 题目TP门 题目描述 给定两个整数L和R,你需要在闭区间[L,R]内找到距离最接近的两个相邻质数C1和C2(即C2-C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对. 同时,你 ...
- c# 计算1-100之间的所有质数(素数)的和
求1-100之间的所有质数(素数)的和: 所以先必须知道什么是质数? 一个数是不是素数 “素数”是指除了能被1和自身整除外,不能被任何其它整数整除的自然数. 然后知道有哪些是质数: 记忆的方法: ...
- d029: 求出2-100之间的所有质数(素数)
内容: 求出2-100之间的所有质数(素数) 输入说明: 无 输出说明: 一行一个素数 /* 质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数(不包括0)整除的数. */ ...
- java求0~100的质数(素数)
质数的概念: 简单的来说就是一个数从2开始取模到(求余数)自身的值,如果取模后余数一直不等于0那么这个数就是质数(素数). 如 7 7%2 7%3 7%4 7%5 7%6 ...
随机推荐
- Docker 运行 MYSQL 数据库的总结
公司里面要求做一个小demo 学习java相关的东西 然后使用了mysql数据库 很早之前做过mysql的容器化运行. 现在想想已经忘记的差不多了 所以这里总结一下 docker化运行mysql数据 ...
- Linux软链接的创建,删除,修改
Linux软链接,类似于windows系统的快捷键.譬如你将windows系统的D盘中某一个文件夹放在桌面上当做快捷键. 一.软链接创建 1.创建软链接 ln -s [目标目录] [软链接地址] [目 ...
- Linux就该这么学——初识vim编辑器
在Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数 初识Vim编辑器 Vim编辑器顾名思义就是用来编写脚本程序的”记事本” Vim编辑器模式 : 命令模式 : 控制光标移动,可对 ...
- Docker——桥接网络配置
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# ls ifcfg-et ...
- singleWsdl和wsdl区别,Axis2和CXF对比
WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互. 其实WebSer ...
- 洛谷题解P4314CPU监控--线段树
题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...
- python操作MySQL数据库(转)
先来一个简单的例子吧: ? 1 2 3 4 5 6 7 8 9 10 import MySQLdb try: conn=MySQLdb.connect(host='localhost',u ...
- vue-router History 本地开发环境和nginx配置
vue-router mode=history本地开发环境配置 解决方法1.修改webpack的的devServer配置项(devServe存在于,rvue-cli2在webapck.config.j ...
- 4.移动端自动化测试-API讲解
一.前置代码 1.导入driver对象 from appium import webdriver 2.声明手机驱动对象 只有声明驱动对象我们才可以让手机完成脚本的操作 driver = ...
- 配置Notepad++万能调试
需求: 正常情况下 使用notepad++编辑修改一些网页或脚本文件,修改之后想要查看效果需要Ctrl+S保存,然后从文件目录中打开查看. 现在我想做的就是简化查看效果的流程,让notepad++实现 ...