当前位置: 首页 > news >正文

质数距离 - 如何在较合理的时间复杂度内求2e9范围内的质数

求l、r之间的质数,范围在2e9,但l、r的差值不大,在1e6范围内

先求出\sqrt{2e9} 内的质数,然后拿这个指数去筛[l, r]范围内的即可

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;typedef pair<int, int> PII;
typedef long long ll;
typedef long double ld;const int N = 50010, M = 1000010;int primes[N], cnt;
bool st[M];
int p[M];void init()
{for(int i = 2; i < N; i ++){if(!st[i])primes[cnt ++] = i;for(int j = 0; primes[j] * i < N; j ++){st[primes[j] * i] = true;if(i % primes[j] == 0)break;}}
}int main()
{IOSinit();int cnt_tmp = cnt;ll l, r;while(cin >> l >> r){if(l == 1)l = 2;memset(st, false, sizeof st);cnt = cnt_tmp;for(int i = 0; i < cnt; i ++){ll start = max((ll)primes[i] * 2, (l + primes[i] - 1) / primes[i] * primes[i]);for(ll j = start; j <= r; j += primes[i]){st[j - l] = true;}}cnt = 0;for(int i = 0; i <= r - l; i ++){if(!st[i])p[cnt ++] = i;}if(cnt < 2){cout << "There are no adjacent primes." << endl;continue;}int min1 = 0, min2 = 2e9, max1 = 0, max2 = 0;for(int i = 0; i < cnt - 1; i ++){if(p[i + 1] - p[i] < min2 - min1){min1 = p[i];min2 = p[i + 1];}if(p[i + 1] - p[i] > max2 - max1){max1 = p[i];max2 = p[i + 1];}}cout << min1+l << "," << min2+l << " are closest, " << max1+l << "," << max2+l << " are most distant." << endl;}return 0;
}

要注意的几个点:

1.对于每次筛最少要从primes[i] * 2开始,不能筛到质数 

2.在start计算过程中和j+的过程中很容易爆int,注意这部分开ll

3.求大于等于l的第一个p的倍数:(l + p - 1) / p * p

http://www.lryc.cn/news/180687.html

相关文章:

  • 八、3d场景的区域光墙
  • 深入探讨 Presto 中的缓存
  • 3.物联网射频识别,(高频)RFID应用ISO14443-2协议,(校园卡)Mifare S50卡
  • 【IDEA】IDEA 单行注释开头添加空格
  • 三等分功分器[波导]设计详细教程
  • Mysql分库分表
  • 【算法学习】-【双指针】-【复写零】
  • 【算法优选】双指针专题——叁
  • Java栈的压入、弹出序列(详解)
  • RabbitMQ学习笔记(消息发布确认,死信队列,集群,交换机,持久化,生产者、消费者)
  • PyTorch - 模型训练损失 (Loss) NaN 问题的解决方案
  • 8、Nacos服务注册服务端源码分析(七)
  • MySQL使用Xtrabackup在线做主从
  • scala基础入门
  • 【Java-LangChain:面向开发者的提示工程-5】推断
  • 【C++】手撕vector(vector的模拟实现)
  • 智能指针那些事
  • Fiddler抓取手机https包的步骤
  • idea没有maven工具栏解决方法
  • levelDB引擎
  • IM同步服务
  • MySQL 运维常用脚本
  • ABC322刷题记
  • visual studio的安装及scanf报错的解决
  • React生命周期
  • SpringBoot整合RocketMQ笔记
  • 【【萌新的RiscV学习之在写代码之前对于关键路径的分析-11】】
  • A. Sequence with Digits
  • gitlab配置webhook限制提交注释
  • 蓝桥杯Python scratch C++选拔赛stema个人如何报名?