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 ...
随机推荐
- PAT(Advanced Level)1055.The World's Richest
Forbes magazine publishes every year its list of billionaires based on the annual ranking of the wor ...
- 详解vue 路由跳转四种方式 (带参数)
详解vue 路由跳转四种方式 (带参数):https://www.jb51.net/article/160401.htm 1. router-link ? 1 2 3 4 5 6 7 8 9 10 ...
- Linux系列(11):之bash进阶与数据流导向、管线命令
1.万用字符与特殊字符 在bash的环境下有一个特别有用的功能,那就是万用字符!下面展示常见的万用字符: 1.万用字符 除了万用字符还有一些其他的特殊字符,接下来显示特殊字符. 2.特殊字符 2.数据 ...
- POJ - 3687 Labeling Balls (拓扑)
(点击此处查看原题) 题意 此处有n盏灯,编号为1~n,每盏灯的亮度都是唯一的,且在1~n范围之间,现已知m对灯之间的关系:a b ,说明灯a的亮度比灯b小,求出每盏灯的亮度,要求字典序最小(编号小的 ...
- 数位dp详解&&LG P2602 [ZJOI2010]数字计数
数位dp,适用于解决一类求x~y之间有多少个符合要求的数或者其他. 例题 题目描述 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除 ...
- MySQL-存储引擎-创建表-字段数据类型-严格模式-字段约束-键-02
目录 扩展点 查看服务端字符.IP.端口配置 取消本次错误输入 例外情况 database 数据库操作 table 数据表操作 查看MySQL存储引擎 常见几个存储引擎 InnoDB MyISAM M ...
- 如何使用加多宝(jdb)在linux下调试Java程序
毕业时写了一段时间的C,那时候调试使用gdb,后来转了java,当时就想java程序怎么调试,找了一下,果然,那就是jdk自带的jdb windows里是这样的 Linux下是这样的 一般我在linu ...
- 怎样在 Linux 上查看某个端口的相关信息?
比如 TCP端口 / UDP端口 / 端口占用程序的进程号 等, 这些信息都可以使用: netstat -atunlp | grep 端口号 来进行获取. 比如我们想获取 22 端口的相关信息: 这里 ...
- EXSI宿主机更换硬盘后虚机启动有问题
环境说明: 最近EXSI主机磁盘坏掉了,重新换掉磁盘以后启动虚机有问题. 虚机的报错信息如下: 找了下修复方法,操作过程为: 尝试修复 (以下是百度的方法) ls -l /dev/mapper mkd ...
- Maven maven-compiler-plugin 编译问题
问题:每次右键项目名-maven->update project 时候,项目jdk版本变了,变回1.5版本或者其他版本 解决方案一:修改maven的配置(解压目录的conf\setting.xm ...