poj 2689 大范围内素数筛选
/**
给定一定范围求其内的素数 注意:
**/ #include <iostream>
#include <math.h>
#include <cstring>
using namespace std;
#define maxn 1000000
long long prime[];
long long cprime[];
long long isprime[maxn+];
long long vis[maxn+];
long long q;
void getprime(){
//memset(isprime,0,sizeof(isprime));
q =-;
long long i,j;
isprime[] = isprime[] =;
for(i=;i<maxn;i++){
if(!isprime[i])
prime[++q] = i;
for(j=;j<=q&&prime[j]*i<maxn;j++){
isprime[prime[j]*i] =;
if(i%prime[j]==)
break;
}
}
} long long qt;
void getprime1(long long a, long long b){
qt =-;
if(b<maxn){
for(long long i=a;i<=b;i++){
if(!isprime[i])
cprime[++qt] = i;
}
}else{
memset(vis,,sizeof(vis));
long long i,k;
for(i=;i<=b-a;i++){
vis[i] =;
}
for(i=;prime[i]*prime[i]<=b&&i<=q;i++){
k = a/prime[i];
if(k*prime[i]<a) k++;
if(k<=) k++;
while(k*prime[i]<=b){
vis[k*prime[i]-a] =;
k++;
}
}
for(i=;i<=b-a;i++){
if(vis[i]==)
cprime[++qt] = i+a;
}
} }
int main()
{
getprime();
//for(int i=0;i<10;i++)
// cout<<prime[i]<<endl;
long long a,b;
while(cin>>a>>b){
long long maxnum =-;
long long minnum =0x3f3f3f3f;
getprime1(a,b);
long long max1,max2,min1,min2;
// for(int i=0;i<=qt;i++)
// cout<<cprime[i]<<endl;
for(long long i=;i<qt;i++){
long long temp = cprime[i+]-cprime[i];
if(temp>maxnum){
maxnum =temp;
max1 = cprime[i];
max2 = cprime[i+];
}
if(temp<minnum){
minnum =temp;
min1 = cprime[i];
min2 = cprime[i+];
}
}
if((qt+)<=)
cout<<"There are no adjacent primes."<<endl;
else
cout<<min1<<","<<min2<<" are closest, "<<max1<<","<<max2<<" are most distant."<<endl;
}
return ;
}
poj 2689 大范围内素数筛选的更多相关文章
- POJ 2689 Prime Distance (素数筛选法,大区间筛选)
题意:给出一个区间[L,U],找出区间里相邻的距离最近的两个素数和距离最远的两个素数. 用素数筛选法.所有小于U的数,如果是合数,必定是某个因子(2到sqrt(U)间的素数)的倍数.由于sqrt(U) ...
- POJ 2689 Prime Distance(素数筛选)
题目链接:http://poj.org/problem?id=2689 题意:给出一个区间[L, R],找出区间内相连的,距离最近和距离最远的两个素数对.其中(1<=L<R<=2,1 ...
- poj 2262 Goldbach's Conjecture(素数筛选法)
http://poj.org/problem?id=2262 Goldbach's Conjecture Time Limit: 1000MS Memory Limit: 65536K Total ...
- POJ 2689 Prime Distance (素数+两次筛选)
题目地址:http://poj.org/problem?id=2689 题意:给你一个不超过1000000的区间L-R,要你求出区间内相邻素数差的最大最小值,输出相邻素数. AC代码: #includ ...
- poj 2689 Prime Distance (素数二次筛法)
2689 -- Prime Distance 没怎么研究过数论,还是今天才知道有素数二次筛法这样的东西. 题意是,要求求出给定区间内相邻两个素数的最大和最小差. 二次筛法的意思其实就是先将1~sqrt ...
- 大区间素数筛选(POJ 2689)
/* *POJ 2689 Prime Distance *给出一个区间[L,U],找出区间内容.相邻的距离最近的两个素数和距离最远的两个素数 *1<=L<U<=2147483647 ...
- poj 2689 Prime Distance(大区间素数)
题目链接:poj 2689 Prime Distance 题意: 给你一个很大的区间(区间差不超过100w),让你找出这个区间的相邻最大和最小的两对素数 题解: 正向去找这个区间的素数会超时,我们考虑 ...
- ACM/ICPC 之 数论-素数筛选法 与 "打表"思路(POJ 1595)
何为"打表"呢,说得简单点就是: 有时候与其重复运行同样的算法得出答案,还不如直接用算法把这组数据所有可能的答案都枚举出来存到一个足够大的容器中去-例如数组(打表),然后再输入数据 ...
- POJ 2773 Happy 2006#素数筛选+容斥原理+二分
http://poj.org/problem?id=2773 说实话这道题..一点都不Happy好吗 似乎还可以用欧拉函数来解这道题,但正好刚学了容斥原理和二分,就用这个解法吧. 题解:要求输出[1, ...
随机推荐
- Linux 07 故障恢复
1. 模拟MBR扇区被破坏后的修复. MBR故障恢复: 1.备份 添加硬盘 启动操作系统: 添加硬盘: 对分区格式化: 挂载: 做备份: 破坏MBR 重启系统: 关闭虚拟机 设置光盘启动 救援模式: ...
- C# 与 VB.NET 对比
C# 与 VB.NET 对比 2008-06-20 15:30 by Anders Cui, 1462 阅读, 3 评论, 收藏, 编辑 Table of Contents 1.0 Int ...
- R 语言学习笔记
data() 调用内置数据集 help(women) 查看数据集women的帮助文档 当忘记函数名称时可以按关键字搜索:help.search(),简写为??“” str(var) 查看R对象内部结 ...
- Linux 学习之网络故障排查
1.ping www.baidu.com 查看高速有没有修通,如果通,但还不能上网:可能是浏览器.中毒等问题2.ping 网关(10.0.0.254),目的是排除物理链路(网线,网卡,驱动,IP设置等 ...
- Eclipse 修改字体
- nodeJs入门笔记(二)
js中window通常是全局变量 global 是node.js里的全局变量 node中能访问的对象一般都是 global的 属性 global 对象属性 process 用于描述当前Node 进程状 ...
- 获取checkbox 的选中状态的id、checkbox的一些操作
var id_array=new Array(); $('input[name="id"]:checked').each(function(){ id_array.push($(t ...
- hdu 2222 Keywords Search ac自动机模板
题目链接 先整理一发ac自动机模板.. #include <iostream> #include <vector> #include <cstdio> #inclu ...
- Python核心编程笔记--unicode编码
#定义编码方式,与物理文件. code='utf-8'file='D:/utf8.txt' #把编码后的字符写入文件. hello_out =u'hello world'bytes_out =hell ...
- delphi 修改代码补全的快捷键(由Ctrl+Space 改为 Ctrl + alt + Space)
delphi 的IDE快捷键与输入法切换键中突,以往的解决方法是下载一个ImeTool修改 windows 系统的快捷键 在 xp win7 都好使,但在win 10经常是修改完后,重启又失效了. 本 ...