蓝书(算法竞赛进阶指南)刷题记录——POJ2689 Prime Distance(筛法)

使用Docker搭建MaxKB智能体平台 【代码】使用Docker搭建MaxKB智能体平台。 阅读详情

题目:POJ2689.
题目大意:给定区间 [ L , R ] [L,R] [L,R],要求区间中差最小的相邻素数和差最大的相邻素数.
1 ≤ L &lt; R ≤ 2 31 − 1 , 1 ≤ R − L + 1 ≤ 1 0 6 1\leq L&lt;R\leq 2^{31}-1,1\leq R-L+1\leq 10^6 1≤L<R≤231−1,1≤R−L+1≤106.

这道题一看不可做,毕竟 L , R &lt; 2 31 L,R&lt; 2^{31} L,R<231的数据范围太大,但是一看 R − L ≤ 1 0 6 R-L\leq 10^6 R−L≤106的限制就会想到一定是从区间 [ L , R ] [L,R] [L,R]中的数入手.

想到尝试枚举区间 [ L , R ] [L,R] [L,R]中的每一个数,暴力计算每一个数是否为合数,然后统计,发现这样做时间复杂度是 O ( ( R − L ) R ) O((R-L)\sqrt R) O((R−L)R ​)的,过不了.

考虑一个数为合数时因数的性质,发现一个合数 n n n必定有一个因数 x x x满足 x ≤ n x\leq \sqrt n x≤n ​,所以考虑利用这个性质来做这道题.

利用上面那个性质可以想到,区间 [ L , R ] [L,R] [L,R]中的任意一个合数必定有一个因数 x x x满足 x ≤ R x\leq \sqrt R x≤R ​,所以可以枚举 [ 2 , R ] [2,\sqrt R] [2,R ​]内的所有数,把这些数在区间 [ L , R ] [L,R] [L,R]内的倍数全部打上合数的标记,最后把没打标记的数取出来统计即可.时间复杂度 O ( ( R − L ) log ⁡ R ) O((R-L)\log\sqrt R) O((R−L)logR ​),但是我用这个做法TLE了…

考虑优化,每次把 [ 2 , R ] [2,\sqrt R] [2,R ​]内的质数筛出来,直接用质数去筛 [ L , R ] [L,R] [L,R]内的数即可.按照 [ 1 , n ] [1,n] [1,n]中的素数有 O ( n log ⁡ n ) O(\frac{n}{\log n}) O(lognn​)来计算的话,这个算法的时间复杂度约为 O ( R + ( R − L ) log ⁡ log ⁡ R ) O(\sqrt R+(R-L)\log\log\sqrt{R}) O(R ​+(R−L)loglogR ​).

代码如下:

#include<cstdio>
#include<iostream>
  using namespace std;

#define Abigail inline void
typedef long long LL;

const int N=1000000;

int pr[N+9],tpr,b[N+9];
int l,r;
int cnt[N+9],p[N+9],tp;
int mx,mn;

Abigail sieve(int n){
  for (int i=2;i<=n;++i) b[i]=1;
  for (int i=2;i<=n;++i){
  	if (b[i]) pr[++tpr]=i;
  	for (int j=1;j<=tpr&&i*pr[j]<=n;++j){
  	  b[i*pr[j]]=0;
  	  if (i%pr[j]==0) break;
  	}
  }
} 

Abigail work(){
  int ll,rr,now=0;
  for (now=1;now<=tpr&&pr[now]*pr[now]<=r;++now);
  --now;
  for (int i=1;i<=tpr;++i){
  	ll=l/pr[i];
    if (pr[i]*ll<l) ++ll;
    if (ll<2) ll=2;      //避免自己把自己筛掉 
    rr=r/pr[i];
    for (int j=ll;j<=rr;++j)
      cnt[pr[i]*j-l+1]=1;
  }
  for (int i=0;i<=r-l;++i)
    if (!cnt[i+1]&&l+i>1) p[++tp]=l+i;
  mx=mn=1;
  for (int i=2;i<tp;++i){
    if (p[mx+1]-p[mx]<p[i+1]-p[i]) mx=i;
    if (p[mn+1]-p[mn]>p[i+1]-p[i]) mn=i;
  } 
}

Abigail outo(){
  if (tp<2) puts("There are no adjacent primes.");
  else printf("%d,%d are closest, %d,%d are most distant.\n",p[mn],p[mn+1],p[mx],p[mx+1]);
  for (int i=1;i<=r-l+1;++i)
    cnt[i]=0;
  tp=0;
}

int main(){
  sieve(N);
  while (~scanf("%d%d",&l,&r)){
    work();
    outo();
  }
  return 0;
}
PDS联合Modelsim仿真报错(Error loading design) line6报错 -novopt已禁用 (全网最详细!!!!!) 发现这个文档是Pango自动生成的,也就是说每一次我们点击"Run Behavior Simulation"的时候,PDS都会自动生成一次这个./run_behav_simulate.tcl文件,所以就算我们这一次把这个文件修改了,我点击"Run Behavior Simulation"想让它再跑一次正确的仿真,它此时又重新生成了这个带有-novopt的错误tcl文件,仿真依旧不能成功。问题真的是出在这里,那我们修改这个./run_behav_simulate.tcl文件就好了,但事实并非如此! 阅读详情

相关推荐

从零到一:基于Docker与OSM数据构建Valhalla路径规划服务及Mapbox风格可视化

本文详细介绍了如何从零开始,基于Docker容器技术快速部署开源的Valhalla路径规划服务。通过获取免费的OSM地图数据并构建路网,最终实现服务调用与Mapbox风格的地图可视化,为出行应用原型开发或本地化路径规划服务提供了一套完整、高效的实践方案。

weixin_29297127的博客 166

poj2689(素数区间筛法模板)

题目链接: http://poj.org/problem?id=2689 题意: 给出一个区间 [l, r] 求其中相邻的距离最近和最远的素数对 . 其中 1 <= l < r <= 2,147,483,647, r - l <= 1e6 . 思路: 素数区间筛 要找到 [l, r] 中相邻最近和最远的素数对肯定是需要找出 [l, r] 内所有素数 . ...

weixin_30785593的博客 231

CentOS 7下Multipath多路径存储的实战配置与性能优化

本文详细介绍了在CentOS 7系统中配置与优化Multipath多路径存储的完整实战流程。从安装部署、核心配置文件解读,到性能调优与生产环境避坑指南,全面解析如何利用Device Mapper Multipath构建高可用、负载均衡的存储链路,提升存储系统可靠性与I/O性能。

weixin_29278805的博客 320

蓝书(算法竞赛进阶指南)学习笔记

算法竞赛进阶指南——笔记 0X00 - 0x01位运算 知识: 位移(左移右移)快速幂 快速乘等等 二进制压缩 (隐隐约约指向 状压DP )基操 取数 位运算特点 二进制下不进位利用这特点可以我们可以做题 小技巧(应用邻接表 我不用) n为偶数时 n ^ 1 = n + 1; n为基数时 n ^ 1 = n - 1; lowbit 运算 最低位的1与之后的0 广泛应用于各地 例题 CH0101/Acwing(vjudge) 求a^b的次方mod p数据范围为1e9/1e18 我们已知所有

lan_m的博客 2338

【计算机视觉】基于复杂环境下的车牌识别

本文针对复杂环境下(光照变化、车牌变形、噪声干扰)的车牌识别问题,提出了一套完整的优化方案。通过四个核心环节进行改进:1)采用CLAHE、同态滤波等技术优化光照处理;2)使用边缘检测和透视变换应对车牌变形;3)结合中值滤波和暗通道去噪算法消除干扰;4)改进字符分割与识别方法。文章提供了详细的Python实现代码,展示了从预处理到字符识别的完整流程,并通过多策略融合显著提升了复杂场景下的识别准确率。实验结果表明,该方法能有效应对各类复杂环境挑战,为实际应用提供了可靠解决方案。

2401_84149564的博客 1627

手把手教你为FPGA项目集成HyperRAM IP核:从AXI接口封装到上板调试全流程

本文详细介绍了如何为FPGA项目集成HyperRAM IP核,涵盖从AXI接口封装到上板调试的全流程。通过对比DDR3L、PSRAM和HyperRAM的性能指标,突出HyperRAM在低功耗和小封装尺寸方面的优势,并提供硬件连接、AXI4-Lite接口设计、状态机优化及调试技巧等实用内容,帮助开发者高效完成FPGA项目中的内存扩展。

weixin_32103009的博客 285

算法进阶-蓝书-起床困难症

int calc(vector<vector<int>> vec, int bt, int base) { int res = base; for (int i = 0; i < vec.size(); i++) { int op = vec[i][0]; int para = vec[i][1]>>bt; if (op == 0)res &= para; else if (op == 1)res |= para; els...

weixin_40428368的博客 230

SLAM工程师面试避坑指南:2025年最新高频考点与实战代码解析

本文为SLAM工程师提供2025年最新面试避坑指南,涵盖高频技术考点如VINS初始化、三维几何处理、多传感器融合架构设计等,并包含实战代码解析。特别针对算法工程师面试中的常见陷阱,提供系统设计框架和代码模板,帮助求职者提升通过率。

metaverse5vr的博客 246

蓝书(算法竞赛进阶指南)刷题记录——POJ1961 Period(KMP算法)

题目:POJ1961. 题目大意:给定一个长度为nnn的字符串S[1..n]S[1..n]S[1..n],求出对于每一个前缀S[1..i]S[1..i]S[1..i]满足最大循环次数大于111,该前缀的长度与最大循环次数. 注:一个串S[1..n]S[1..n]S[1..n]的一个iii最小的前缀S[1..i]S[1..i]S[1..i]满足S[1..i]S[1..i]S[1..i]重复k(k∈N...

hzk_cpp的博客 444

树莓派与ROS2

树莓派与ROS2(Robot Operating System 2)的结合使用为机器人开发、自动化控制以及物联网项目提供了强大的平台。

weixin_47695827的博客 1755

TMC5160电机驱动芯片实战:从模式选择到参数配置全解析

本文深入解析TMC5160电机驱动芯片的实战应用,涵盖三种核心工作模式的选择策略与参数配置。详细介绍了全功能运动控制、外部脉冲驱动及独立驱动模式的应用场景与配置要点,并提供了电流控制、静音优化、SPI通信及高级功能(如StallGuard2)的调优指南,帮助开发者充分发挥其高精度、低噪音性能。

weixin_29179311的博客 323

算法竞赛入门经典训练指南(蓝书)Ping pong(UVaLive4329)树状数组

题意 在一个序列中,存在三个数为升序摆放或降序摆放,则这三个数可以视作能够举行比赛。问比赛的种数。 ps.升序或降序表示两个运动员之间的人中有人可以充当裁判,同时两个运动员愿意去裁判家中比赛。 思路 若 a1a_1a1​ 到 ai−1a_{i-1}ai−1​ 有 bib_ibi​ 个数比 aia_iai​ 小,那么就有 i−1−bii-1-b_ii−1−bi​ 个数比 aia_iai​ 大。所以我们可以记录 aia_iai​ 左边比 aia_iai​ 小的数与 aia_iai​ 右边比 aia_iai​ 小

CofDoria的博客 462

哨兵1号后向散射系数土壤水分反演

打开之前预处理之后的VH和VV极化的后向散射系数转存的tiff文件。

所有专家都曾始于新手 3293

[POJ 2689] Prime Distance

大素数筛选,输入两个整数 1<=L< U<=2147483647 ,U - L <=1000000,要你求L到U中距离最近的两个素数个距离最远的两个素数

AcmHonor的专栏 871

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Prime Distance POJ - 2689(素数筛的应用)

题意:传送门 题解:L,R≤231L,R\le2^{31}L,R≤231,素数筛根本打不到1e91e91e9的范围,但是区间最多只有1e61e61e6,有一个定理需要知道就是任何一个合数必定包含一个不超过n\sqrt {n}n​的质因子。可以打出500005000050000的质因数,然后枚举质数的倍数将[l,r][l,r][l,r]区间中的合数筛去,最后从质数中找出答案即可。 复杂度分析:线性筛...

肘子的博客 325

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

POJ 2115 C Looooops 扩展欧几里德算法

A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; variable != B; variable += C) statement; I.e., a loop which starts by setting variable to value A and while vari...

weixin_44705665的博客 219

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

蓝书(算法竞赛进阶指南)刷题记录——CH5102 Mobile Service(DP)

题目:CH5102. 题目大意:三个人一开始在1,2,31,2,31,2,3的位置,每次给定一个111~lll的坐标(必须按顺序),他们之中必须有一个人走到这个坐标,且他们之中不能有两人站在同一位置,从点xxx走到点yyy的花费为c(x,y)c(x,y)c(x,y),求最小花费. 首先这是一道十分裸的DP,我们可以设状态f[i][x][y][z]f[i][x][y][z]f[i][x][y][z]...

hzk_cpp的博客 428

蓝书(算法竞赛进阶指南)刷题记录——POJ1475 Pushing Boxes(bfs套bfs)

题目:POJ1475. 题目大意:给定一个n∗mn*mn∗m的迷宫,现在有一个箱子和一个人,要求让这个人把箱子推到指定位置,求箱子的移动步数最少的方案并输出,若有多个则要求人的移动步数也最少,若还有多个方案则输出任意一个. 1≤n,m≤201\leq n,m\leq 201≤n,m≤20. ...

hzk_cpp的博客 375

POJ3461 && LOJ#10033 Oulipo(字符串HASH)

题目链接 Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter'e'. He was a member of the Oulipo group. A quote from the book: Tout avait Pair ...

悲伤无声地涌出来 396

poj 2079 Triangle(旋转卡壳)

平面上给出一些点,求这些形成三角形中最大的面积。 思路:先求一次凸包,然后在凸包上枚举三角形的第一个顶点i,把其他两个顶点拿来旋转。开始没有考虑到三角形的边可以不是凸包上的边,就当做求凸包直径那样旋转,结果wa到吐。。。。 #include #include #include #include #include #include #include using namespace std; s

1186

蓝书(算法竞赛进阶指南)刷题记录——POJ1704 Georgia and Bob(博弈论)

题目:POJ1704. 题目大意:给定1∗n1*n1∗n的棋盘,mmm颗棋子的坐标为a1,a2,...,ama_1,a_2,...,a_ma1​,a2​,...,am​.现在两人轮流操作,每次操作可以把一颗棋子往左移,但不能超过它左边的棋子或走出棋盘(初始坐标111),无法操作的人输,问是否先手必胜. 这貌似是博弈论中经典的模型,叫阶梯型博弈. 考虑这个模型是否可以转化为NIM博弈.考虑只有两颗棋...

hzk_cpp的博客 391

poj 2689 Prime Distance

<br />此题不难,刚开始没思路,google一下,看到筛选两个字就马上懂了,于是开始写,刚开始是RE,于是把int都改成long long,有可能溢出- -。。后来WA,看了很久没看出来,再次google,发现了我少了个判断,就是remark,在筛选区间内的素数时,因为1前面没有素数,而我的memset会将1搞成素数,而后面都没更新,于是一直被当作是素数处理- -。。结果就悲剧了,以后做题还是要注意啊,什么边界的。。<br />#include <stdio.h> #include <string.h

alfredtofu的专栏 837

POJ 2689 Prime Distance

素数的二次筛选。 素数的筛选,数据比较大,不能用常用的方法。因为最大数据是20亿,开根号后就为50000左右,把5万以下的素数表打出,再二次筛选就可以了。 开始的时候把函数写在外面超时,写进去以后就0ms过,这个想不通。。。 AC代码: #include #include #include #include #include using namespace std; int q[6

llbcys 840

蓝书(算法竞赛进阶指南)刷题记录——hdu4348 To the moon(主席树)

题目大意:给定一个长度为nnn的序列,要求支持以下操作mmm次: 1.格式C&ThinSpace;l&ThinSpace;r&ThinSpace;dC\,l\,r\,dClrd,表示给区间[l,r][l,r][l,r]加上ddd并给时刻ttt加111. 2.格式Q&ThinSpace;l&ThinSpace;rQ\,l\,rQlr,表示查询当前区间[l,r]...

hzk_cpp的博客 308

【数论】poj2689 Prime Distance

传送门:戳我 题目大意:

Lorry酱的专栏 661

POJ 2182 Lost Cows 权值线段树

题目链接:POJ 2182 Lost Cows 题目 Description N (2 <= N <= 8,000) cows have unique brands in the range 1…N. In a spectacular display of poor judgment, they visited the neighborhood ‘watering hole’ and...

weixin_44273380的博客 282
上一篇: BZOJ2820 YY的GCD题解(Mobius反演+除法分块)
下一篇: BZOJ2326数学作业题解(矩阵乘法)
hezlik
博客等级 码龄9年 111粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值