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, ...
随机推荐
- Eclipse配置Hadoop开发环境
Step 1:选择Hadoop版本对应的Eclipse插件jar包(可自行编译),我的Hadoop版本是hadoop-0.20.2,对应的插件应该是:hadoop-0.20.2-eclipse-plu ...
- iOS多态 动态绑定
多态和动态绑定是为了解决父类调用子类的问题 首先,声明三个类aa bb cc 都继承于fist类 #import <Foundation/Foundation.h> @interface ...
- ES6第一篇
//新的数字方面的方法 const I = 3.4893589; console.log(Number.parseInt(I)); console.log(Number.parseFloat(I)); ...
- win7 64位安装 oracle 11G 和 使用 PLSQL Developer 连接服务器
其实基本过程和网上大多数人的完全一样,只是后面的plsql上加了几张图片而已,以此给自己做个记录,万一网上的没了,这里自己还有,会了的大森(大神),就请路过吧 1.双击开始安装
- js函数定时器,定时读取系统实时连接数
function GetDeviceInfo() { setInterval(function() { GetDeviceRealtimeConnect(); ...
- 比callback更简洁的链式执行promise
promise自己理解的也不够深刻,具体知识点不在这里细说了 直接上个例子,清晰明了,自己去悟吧 <script type="text/javascript"> //模 ...
- virtualbox 虚拟机网络设置
1.宿主机网卡设置 virtualbox 第一块网卡设置 virtualbox第二块网卡设置 2.虚拟机网络设置 找到以上设置中MAC地址对应的那个网卡: 配置网络: 重启网络,ok.
- C#版-百度网盘API的实现(二)
在这篇文章中,我们通过代码来实现百度网盘的简单操作, 一,登陆,在代码中,我有一个Baidu1的类,实例化该类时回执行登陆方法,该类对外开放了三个方法, 1,GetFileDir获取根目录下的文件夹及 ...
- 梯度下降算法的一点认识(Ng第一课)
昨天开始看Ng教授的机器学习课,发现果然是不错的课程,一口气看到第二课. 第一课 没有什么新知识,就是机器学习的概况吧. 第二课 出现了一些听不太懂的概念.其实这堂课主要就讲了一个算法,梯度下降算法. ...
- ubuntu 下编译内核
目的: 1. 练习.网上有很多类似的文章可供参考. 2. 为写qemu的watchdog驱动练手. 有朋友问make的 watchdog驱动 需要什么准备,所以写这个blog. 环境: ubuntu ...