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 ...
随机推荐
- 什么是分析型数据库PostgreSQL版
分析型数据库PostgreSQL版(原HybridDB for PostgreSQL)为您提供简单.快速.经济高效的 PB 级云端数据仓库解决方案.分析型数据库PostgreSQL版 兼容 Green ...
- Linux就该这么学——新手必须掌握的命令之系统状态检测命令组
ifconfig命令 用途 : 获取网卡配置与网络状态等信息 格式 : ifconfig[网络设备][参数] 其实主要查看的就是网卡名称,inet参数后面的IP地址,ether参数后面的网卡物理地址( ...
- spark教程(18)-sparkSQL 自定义函数
sparkSQL 也允许用户自定义函数,包括 UDF.UDAF,但没有 UDTF 官方 API class pyspark.sql.UDFRegistration(sparkSession)[sour ...
- Codeforces 1237C2. Balanced Removals (Harder)
传送门 先来考虑一下二维时的情况,那么对于 $x$ 相同的点,我们按 $y$ 排序,然后相邻的一对对消除 最后 $x$ 坐标相同的点最多剩下一个,那么此时所有点的 $x$ 坐标都不一样 再按 $x$ ...
- Java EE javax.servlet中的ServletResponse接口
ServletResponse接口 public interface ServletResponse 子接口:HttpServletResponse 实现类:HttpServletResponseWr ...
- THUWC2020游记
Day0 找了旅馆吃了东西才发现明天要去西郊宾馆,换旅馆?? 清华还安排住宿? asas了. 下午出去和kx&face报PKU的名.然后门卫不让进,老吕开启忽悠模式,然后很快就忽悠过去了.(我 ...
- win DLL 笔记
DLL 头文件: #ifdef DLL_API #else #define DLL 导出类 class DLL_API point { public: void aaa() { } } 导出类中函数 ...
- postgres 索引
索引是一种特殊的查询表,可以使用搜索引擎的数据库以加快数据检索.简单地说,索引是表中的数据的一个指针,在一个数据库中的索引是非常相似,如:一本书的目录. 例如,如果想在一本书中引用的所有页面讨论某个话 ...
- MySql学习笔记【四、数据相关操作】
CURD--增改查删 创建数据 INSERT [INTO] tb_name [(col_name,...)] VALUES(val,..) 若列名缺省,表示插入全部列,也可指定部分列名 如: INSE ...
- Delphi 使用Query组件的SQL查询
樊伟胜