[POJ 2689] Prime Distance
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<cmath>
#include<cstdio>
#include<cstring>
#define N 52005
int 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<l) continue;
if(j==1) continue;
sum[prime[i]*j-l]=1;
}
}
int tot=0,last=0;
int max1,max2,min1,min2;
int maxn=0xcfcfcfcf,minn=0x3f3f3f3f;
for(int i=0;i<=r-l;i++){
//printf("i=%d,sum=%d\n",i,sum[i]);
if(sum[i]) continue;
tot++;
if(tot>1){
if(maxn<i-last){
maxn=i-last;
max1=last,max2=i;
}
if(minn>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;
}
[POJ 2689] Prime Distance的更多相关文章
- poj 2689 Prime Distance(大区间素数)
题目链接:poj 2689 Prime Distance 题意: 给你一个很大的区间(区间差不超过100w),让你找出这个区间的相邻最大和最小的两对素数 题解: 正向去找这个区间的素数会超时,我们考虑 ...
- poj 2689 Prime Distance (素数二次筛法)
2689 -- Prime Distance 没怎么研究过数论,还是今天才知道有素数二次筛法这样的东西. 题意是,要求求出给定区间内相邻两个素数的最大和最小差. 二次筛法的意思其实就是先将1~sqrt ...
- 数论 - 素数的运用 --- poj 2689 : Prime Distance
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12512 Accepted: 3340 D ...
- [ACM] POJ 2689 Prime Distance (筛选范围大素数)
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12811 Accepted: 3420 D ...
- poj 2689 Prime Distance(区间筛选素数)
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9944 Accepted: 2677 De ...
- POJ 2689 - Prime Distance - [埃筛]
题目链接:http://poj.org/problem?id=2689 Time Limit: 1000MS Memory Limit: 65536K Description The branch o ...
- POJ 2689 Prime Distance (素数+两次筛选)
题目地址:http://poj.org/problem?id=2689 题意:给你一个不超过1000000的区间L-R,要你求出区间内相邻素数差的最大最小值,输出相邻素数. AC代码: #includ ...
- poj 2689 Prime Distance(大区间筛素数)
http://poj.org/problem?id=2689 题意:给出一个大区间[L,U],分别求出该区间内连续的相差最小和相差最大的素数对. 由于L<U<=2147483647,直接筛 ...
- POJ 2689 Prime Distance(素数筛选)
题目链接:http://poj.org/problem?id=2689 题意:给出一个区间[L, R],找出区间内相连的,距离最近和距离最远的两个素数对.其中(1<=L<R<=2,1 ...
- 题解报告:poj 2689 Prime Distance(区间素数筛)
Description The branch of mathematics called number theory is about properties of numbers. One of th ...
随机推荐
- 关于git 命令的一些事
克隆代码命令 http://www.yiibai.com/git/git_clone.html 关键:得实现新建本地仓库文件夹 ==> git clone 远程网址 git 上传主要代码:htt ...
- 2019.02.21 bzoj2300: [HAOI2011]防线修建(set+凸包)
传送门 题意:动态维护凸包周长. 思路: 见这篇求面积的吧反正都是一个套路. 代码: #include<bits/stdc++.h> #define int long long #defi ...
- MFC程序执行后台操作时不允许操作界面的一种方法
在使用MFC编写界面程序时,有时候会遇到像点击按钮后,后台进行大量操作后才显示处理结果这种情况,在后台处理过程中,界面不应该被允许做任何操作,这里介绍一种方法. 解决办法 点击按钮后,弹出一个模态对话 ...
- Maths | 相关接收机与最大似然准则
目录 一. 接收机的概念 1.信号解调器 2.检测器 二. 相关解调器的解调过程及其原理 1.构造相关解调器 2.得到接收信号在基向量上的投影 3.相关器输出的性质 三.检测器的实现及其数学原理 1. ...
- 初识Twisted(一)
pip install Twisted 安装Twisted库 from twisted.internet import reactor #开启事件循环 #不是简单的循环 #不会带来任何性能损失 rea ...
- 机器学习&深度学习之路
计划最近好好按步骤按阶段系统性的学习下机器学习和深度学习,希望能坚持下去. 2019-01-05 基于TensorFlow的深度学习系列教程 2--常量Constant 2019-01-03 深度学习 ...
- 你不知道的console调试
概述 浏览器的开发者工具我们经常用,console.log我们也经常用,但是console还有其它一些方便调试的命令,我总结了几个常用的记录在下面,供以后开发时参考,相信对其他人也有用. 获取js执行 ...
- PHP、JS、Python,数据库 获取今天是星期几了?[开发篇]
额,这个看起来是一个好简单的问题,但是真正到自己去一行行写的时候,又给忘了,妈蛋.有空就看看吧.今天是星期几?下面就来看看几种不同语言的实现吧! PHP语言 输出当前时间: echo date('Y- ...
- python循环语句详细讲解
想必大家都知道python循环语句吧,可以python循环语句有多种,比如for循环.while循环.if.else等等, 我们可以通过设置条件表达式永远不为 false 来实现无限循环,实例如下 ...
- LDO和DC-DC的概念,区别及优缺点
最近在做蓝牙项目的时候,遇到了需要配置这两种不同的供电模式的问题,这里顺便温习一下这种供电方式的概念,做个总结. LDO :LOW DROPOUT VOLTAGE 低压差线性稳压器,故名思意,为线性的 ...