博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2689
阅读量:7126 次
发布时间:2019-06-28

本文共 1393 字,大约阅读时间需要 4 分钟。

题意:求[l, r]区间中的间隔距离最大与最小的相邻两个素数,r<2200000000, r-l<10^6

题解:

  对于<a的合数,其必然存在一个素因子b<=sqrt(a)。

  因此先预处理出所有sqrt(MAXINT)的素数,之后对[l, r]区间进行筛法求素数即可

#include 
#include
#include
#define LL long long#define MAXN 2200000000LL l, r, all;bool pd[1000005];LL num[10005];int main(){ pd[1]=1; for(LL i=1; i*i < MAXN; i++) if(!pd[i]) { num[all++]=i; for(LL j=i+i; j*j < MAXN; j+=i) pd[j]=1; } while(scanf("%lld%lld", &l, &r) != EOF) { memset(pd, 0, sizeof(pd)); for(LL i=0; i < all && num[i]*num[i] <= r; i++) for(LL j=(((l+num[i]-1)/num[i]>1)?(l+num[i]-1)/num[i]:2)*num[i]; j <= r; j+=num[i]) pd[j-l]=1; LL close1=0, close2=MAXN, dis1=0, dis2=-1, last=0; for(LL i=l; i <= r; i++) if(!pd[i-l] && i != 1)//1 { if(i-last < close2-close1 && last != 0) close2=i, close1=last; if(i-last > dis2-dis1 && last != 0) dis2=i, dis1=last; last=i; } if(close1 == 0) printf("There are no adjacent primes.\n"); else printf("%lld,%lld are closest, %lld,%lld are most distant.\n", close1, close2, dis1, dis2); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/Mathics/p/4028682.html

你可能感兴趣的文章
windows下python3虚拟环境搭建
查看>>
error at ::0 formal unbound in pointcut
查看>>
关于linux下Squid透明代理的试验
查看>>
马哥2016全新Linux+Python高端运维班第四期-第三次作业
查看>>
AngularJS基础语法
查看>>
程序编译过程
查看>>
《Linux学习并不难》归档和压缩(2):tar包的使用和管理
查看>>
cookie与session详解
查看>>
自定义destoon6.0的地址生成规则
查看>>
ELK之搜索引擎介绍(一)
查看>>
一键 安装lamp+lnmp+ftp+Tomcat任意选择5分钟起飞
查看>>
DNS服务器原理以及搭建主-辅DNS服务器操作指南
查看>>
linux基础命令 cat
查看>>
9.5 18.1-18.5
查看>>
Http常用状态码
查看>>
linux一天一个脚印:进程的管理
查看>>
波音是在自掘死路吗?
查看>>
F5学习——Part 2(F5中的基本元素和standard和Perfomance L4之间的区别)
查看>>
如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化展示
查看>>
以太网络--学习笔记(课外)
查看>>