质数距离 acwing

news2024/10/5 14:22:17

196. 质数距离 - AcWing题库

题意是给你一个区间[l,r],相当于让你把这个区间里面所有的质数提出来,然后找到相邻质数距离最近和最远的第一个点在什么地方

看一下数据范围,不同的数据范围决定了用什么方法去做:

 两个数据范围:一个是区间[l,r]本身是2^31-1,还有区间的长度是1e6

分析:

2^31-1约等于2e9。如果范围是1e7这样是可以把所有的质数筛出来然后扫描一遍的。1e9不可行

接下来使用的方法是二次筛法:

总共是2e9的范围。如果是一个合数,他的因数取前一半是<=sqrt(合数)。反过来说,如果一个数它的前根号的范围内没有它的因子,那后半部分也没有它的因子。如果是这样的话,可以推出它不是一个合数,而是一个质数。

所以取到极限在2e9附近,如果是合数,50000之内一定会有他们的因子,如果没有那就是质数。

因为任何一个数都可以分解质因数。我们使用一下埃氏筛的原理:先把50000里面所有的质数筛出来,然后用每个质数把区间[l,r]里面的合数全部筛掉,就可以得到区间里面的质数了,然后最后扫描一遍。

筛:使用质数的倍数去筛,首先找到大于等于l小于等于r的最小的p的倍数(p是质因子)

答案是\left \lceil \frac{L}{P} \right \rceil*P,转化一下是\left \lfloor \frac{L+P-1}{P} \right \rfloor*P

(这里有一个很基础的板子,就是问最大的不超过p的x的倍数是多少,然后稍稍转化一下)

然后下面是很重要的筛区间里面的合数了:因为数很大,不可以直接用数组的索引来存。所以我们把每次得到的合数映射到这段区间里面此时所在的下标然后标记一下,即st[j-l],就是得到的数减去边界l。

在区间里面的合数全部筛完之后,我们开始遍历这个区间,如果遍历到的下标被标记,也就是此所在位置是个合数,然后把它恢复到这个下标所对应的质数上,用质数筛去存。即边界l加上当前的索引下标:i+l(具体的字母含义见下面代码)

然后操作完就得到了区间里面所有的质数,然后扫描一遍即可出答案

总结:

这个就是二次筛法,先把50000里面所有的质数筛出来,然后利用这些质数把所想要的区间里面的合数筛掉,留下质数,接着操作。这样筛用的方法是数组的下标映射。

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#define IOS ios::sync_with_stdio(false), cin.tie(0);
#include<iostream>
#include<map>
#include<set> 
#include<cstdio>
#include<cstring>
#include<vector>
#include<stack>
#include<algorithm>
#include<cmath>
#include<queue>
#include<deque>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PAII;
const int N=2e6+10,M=5050,INF=1e18,mod=1e9+7,NN=10000010;
int cnt;
bool st[N];
int prime[N];
void init()
{
	int n=50000;
	memset(st,0,sizeof(st));
	for(int i=2;i<=n;i++)
	{
		if(!st[i]) prime[cnt++]=i;
		for(int j=0;prime[j]<=n/i;j++)
		{
			st[prime[j]*i]=true;
			if(i%prime[j]==0) break;
		}
	}
}
signed main(){
    //IOS;
    int T;
    T=1;
    //cin>>T;
    while(T--)
    {
    	int l,r;
    	while(cin>>l>>r)
    	{
    		cnt=0;
			init();
			memset(st,0,sizeof(st));
			for(int i=0;i<cnt;i++)
			{
				int p=prime[i];
				for(int j=max(p*2,(l+p-1)/p*p);j<=r;j+=p)
					st[j-l]=true;
			}
			cnt=0;
			for(int i=0;i<=r-l;i++)
				if(!st[i]&&i+l>=2)
					prime[cnt++]=l+i;
			int maxn=0,minn=0;
			for(int i=0;i+1<cnt;i++)
			{
				int d=prime[i+1]-prime[i];
				if(d<prime[minn+1]-prime[minn]) minn=i;
				if(d>prime[maxn+1]-prime[maxn]) maxn=i;
			}
			if(cnt<2) cout<<"There are no adjacent primes.\n";
			else printf("%lld,%lld are closest, %lld,%lld are most distant.\n",prime[minn],prime[minn+1],prime[maxn],prime[maxn+1]);

			
		}
	}
    return 0;
} 
/*
1 3 7 9
2 4 6 8 5
5 4
a<b



*/ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux多路转接or多路复用模型

目录 一、功能 二、应用场景 三、多路转接模型的实现 1.select模型 1.1操作流程 1.2相关接口 1.3示例 1.4常见使用方式 1.5优缺点 2.poll模型 2.1操作流程 2.2相关接口 2.3示例 2.4优缺点 3.epoll模型 3.1操作流程 3.2相关接口 3.3常见使用方式 3.4epoll的事…

这一年,熬过许多夜,也有些许收获 | 2022年终总结

弹指一挥间&#xff0c;时间如白驹过隙。光阴似箭&#xff0c;日月如梭&#xff0c;时间如闪电&#xff0c;转瞬即逝。回望来时路&#xff0c;不觉潸然泪下… 一说到年终总结&#xff0c;好像都离不开这样煽情的开场白。但不可否认的是&#xff0c;时间确实过得很快&#xff0…

操作指南|通过Snapshot进行投票

Snapshot是一个去中心化的治理平台&#xff0c;包括Moonbeam社区在内的许多Web3社区都使用此平台进行民意投票。民意投票是一种非正式的链下治理流程&#xff0c;允许社区在链上投票之前就某件事发表意见。通过Snapshot进行的民意投票&#xff0c;以及在Moonbeam治理论坛上的讨…

canopen6.0-PDO发送

1、发送PDO 2、发送PDO参数说明 发送PDO标识符:180+NODEID 传输类型 0xff为跟随定时器发送 进制时间:防止某一个报文长时间占用总线设定的时间 envent timer:单位为ms,传输类型设置0xff,定时发送时间 3、发送PDO映射参数说明 PDO映射数目:PDO传输变量数量 7100 01 10h含义…

南卡和漫步者蓝牙耳机哪个好?国产蓝牙耳机南卡和漫步者360度对比评测

现如今&#xff0c;随着蓝牙技术的发展&#xff0c;越来越多的蓝牙耳机出现在我们的日常生活当中&#xff0c;国产蓝牙耳机也不遑多让&#xff0c;在制作上也更为精湛。现在的国产蓝牙耳机品牌有很多&#xff0c;但相较于一些新兴的国产品牌&#xff0c;人们更信赖一些国货老牌…

C#---第十九课:时间DateTime相关的应用 Convert.ToDateTime ParseExact TryParseExact

文章目录1.将字符串转换为标准的DateTime格式2.DateTime数据的相关应用3.ParseExact的应用4.TryParseExact的应用1.将字符串转换为标准的DateTime格式 DateTime 格式是标准的格式&#xff0c;通过这个格式可以方便转换为其他格式、日期的增减、日期的比较等 using System.Diagn…

RK3568平台开发系列讲解(设备驱动篇)等待队列

🚀返回专栏总目录 文章目录 一、等待队列头二、等待队列项三、添加/删除队列四、等待唤醒五、等待事件沉淀、分享、成长,让自己和他人都能有所收获!😄 📢当我们进程去访问设备的时候,经常需要等待有特定事件发生以后再继续往下运行,这个时候就需要在驱动里面实现当条…

以“微”知著,用友ISV生态的力量与担当

由规模化、集约化、智能化带来的影响&#xff0c;不仅可以让养殖户获得更大的养殖密度、更规范的养殖流程、更专业的管理运营&#xff0c;而且能够带动行业发生深远的变革! 养猪也少不了数智化 常言道&#xff1a;民以食为天&#xff0c;猪粮安天下。一头猪就是一个小银行&…

获取微信小程序码传递的参数 / 微信开发者工具模拟扫描小程序码调试

本文主要介绍如何在微信开发者工具中&#xff0c;模拟微信扫描小程序码打开小程序的场景&#xff0c;进行调试。 二维码调试可以看这篇文章&#xff1a;微信开发者工具模拟扫描二维码调试 添加编译模式 添加一个咱们自定义的编译模式 输入模式名称 主要是方便后面的查找 设…

【观察】Oracle NetSuite+德勤中国税务Digital T-Suite:做中国企业“智慧税务”新助手...

伴随着新技术的快速发展&#xff0c;智慧税务成为国家技术力量驱动、治理能力升级背景下的一次全新税务实践。也正因此&#xff0c;继2015年国家税务总局在《“互联网税务”行动计划》中首次提出智慧税务建设目标后&#xff0c;2021年国家再次印发《关于进一步深化税收征管改革…

双非本科到大厂,贫困家庭到深圳买房,我的逆袭之路

20岁的你是否在拼命努力的奋斗呢&#xff1f; 人这一生&#xff0c;其实大大小小有很多的节点&#xff0c;每个年纪该干每个年纪的事情&#xff0c;一步一步的朝前走下去&#xff0c;应该是大部分人目前的现状。 最近一年来&#xff0c;这个号新增了很多的读者&#xff0c;大…

SpringSecurity(二十三)--OAuth2:使用JWT和加密签名(上)对称密钥加密

一、前言 最近阳了所以一直都在休整&#xff0c;大家一定要注意身体&#xff0c;能不阳就不阳&#xff0c;如果阳康后还是一直咳嗽&#xff0c;最好是能去医院看看&#xff0c;这绝对不是专家口中所说的新冠感冒那么简单&#xff0c;也绝对不是什么80%的无症状&#xff0c;大家…

计算机网络——路由信息协议RIP的基本工作原理

&#x1f49f;&#x1f49f;前言 ​ 友友们大家好&#xff0c;我是你们的小王同学&#x1f617;&#x1f617; 今天给大家打来的是 计算机网络——路由信息协议RIP的基本工作原理 希望能给大家带来有用的知识 觉得小王写的不错的话麻烦动动小手 点赞&#x1f44d; 收藏⭐ 评论&…

(四)devops持续集成开发——jenkins的全局工具配置之maven环境安装及配置

前言 本节内容我们主要介绍jenkins中如何集成自定义的maven环境及流水化组件maven插件的安装&#xff0c;这样我们就可以发布流水化的maven项目工程。 正文 上传并安装maven①上传maven安装包 ②解压maven安装包 unzip apache-maven-3.8.3-bin.zip ③配置maven依赖包环境变量…

Attention:何为注意力机制?

本文来自公众号“AI大道理” 人类利用有限的注意力资源从大量信息中快速筛选出高价值信息&#xff0c;这是人类在长期进化中形成的一种生存机制&#xff0c;人类视觉注意力机制极大地提高了视觉信息处理的效率与准确性。 attention从注意力模型的命名方式看&#xff0c;借鉴了…

带你认识不一样的人工智能

人工智能简称AI&#xff0c;它是研究、模拟、延伸和扩展人类智能的理论、方法、技术和应用系统的新兴技术。人工智能是计算机科学的一个领域&#xff0c;正在向机器传递智能&#xff0c;通过模拟人的某些思维过程和智能行为&#xff0c;让机器像人类一样工作、反应和决策。自人…

学习C语言笔记:初始C语言

学习内容&#xff1a; 1.运算符——&#xff1b; 2.函数——main()、printf()&#xff1b; 3.编写一个简单的C程序&#xff1b; 4.创建整型变量&#xff0c;为其赋值并在屏幕上显示其值&#xff1b; 5.换行字符&#xff1b; 6.如何在程序中写注释&#xff0c;创建包含多个函数的…

Docker网络下-自定义网络实战

通过前面两篇的学习,我们对docker网络及四大网络类型都了解了。本文,咱们就来学习docker的自定义网络。我们为什么需要自定义网络呢?是为了让各个主机分门别类,井井有条。方便关联,使得网络之间可以通过服务名进行通信。为什么在容器中,我们要通过服务名进行通信呢?那是…

分享一个门店会员管理系统模板

会员制对于很多人来说都不陌生&#xff0c;进入中国市场几十年的时间里在许多行业都得到了广泛应用。所谓会员制&#xff0c;是指通过向特定的消费群体发放会员卡&#xff0c;并由消费者缴纳会费或者充钱的形式可享受商家的价格折扣、服务等方面优惠的经营形式&#xff0c;从而…

数据库设计以及分布式事务的产生

一、数据库架构的演进 单点时代 1在早期互联网或者当前小型网站,一般数据库和APP都采用单点方式进行部署,系统简单,容易维护读写分离 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29随着互联网的发展,网站访问量越来越大,数据库最先达到瓶颈,…