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

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

Description

给定两个整数 \(L,R\;(1\leq L\leq R\leq 2^{31},R-L\leq 10^6)\) ,求闭区间 \([L,R]\) 中相邻两个数最大的差是多少,输出这些质数。

Solution

任何一个合数 \(N\) 必定包含一个不超过 \(\sqrt N\) 的质因子。

所以,我们只需要用筛法求出 \(2-\sqrt N\) 之间的所有质数。对于每个质数 \(p\) ,把 \([L,R]\) 中能被 \(p\) 整除的数标记。

最终所有未被标记的数就是 \([L,R]\) 中的质数,对相邻的质数两两比较,找出差最大的即可。

还有一个要注意的是这题 \(L,R\) 范围太大,数组开不小,所以对于每个询问,都要加一个偏移量来进行标记和判断。

Code

#include
#include
#include
#define N 52005int l,r;int sum[1000005];bool is_prime[N+10];int prime[N],primecnt;void init(int n){ is_prime[1]=1; for(int i=2;i<=N;i++){ if(!is_prime[i]) prime[++primecnt]=i; for(int j=1;j<=primecnt;j++){ if(i*prime[j]>N) break; is_prime[i*prime[j]]=1; if(i%prime[j]) break; } }}signed main(){ init(N); while(~(scanf("%d%d",&l,&r))){ memset(sum,0,sizeof sum); if(l==1) l++; for(int i=1;i<=primecnt;i++){ for(int j=l/prime[i];j<=r/prime[i];j++){ if(prime[i]*j
1){ if(maxn
i-last){ minn=i-last; min1=last,min2=i; } } last=i; } if(tot==1) printf("There are no adjacent primes.\n"); else printf("%d,%d are closest, %d,%d are most distant.\n",min1+l,min2+l,max1+l,max2+l); } return 0;}

转载于:https://www.cnblogs.com/YoungNeal/p/9026640.html

你可能感兴趣的文章
<authentication> 元素
查看>>
svn向服务器添加新建文件夹
查看>>
iphone UI 开发教程
查看>>
简单选项卡加圆角
查看>>
soritong MP3播放器缓冲区溢出漏洞分析
查看>>
17.10.24 数据最水的一次考试
查看>>
python_SMTP and POP3
查看>>
lambda匿名函数
查看>>
js常用方法
查看>>
建造者模式
查看>>
Spring入门教程:通过MyEclipse开发第一个Spring项目
查看>>
【转】你可能不知道的Shell
查看>>
廖雪峰Java1-2程序基础-1基本结构
查看>>
golang下的grpc
查看>>
1. 自动化运维系列之Cobbler自动装机
查看>>
ASP.NET MVC Model绑定(二)
查看>>
一步一步写算法(之hash表)
查看>>
漫谈并发编程(一) - 并发简单介绍
查看>>
JDBC连接MySQL数据库及演示样例
查看>>
System.currentTimeMillis();
查看>>