题意:给出一个区间[L,U],找出区间里相邻的距离最近的两个素数和距离最远的两个素数。

用素数筛选法。
所有小于U的数,如果是合数,必定是某个因子(2到sqrt(U)间的素数)的倍数。
由于sqrt(U)最大也只有2^16,所以我们可以用素数筛选法,先预处理出2~2^16之间的素数,然后再用这些素数筛选出L~U之间的素数。
接着就好办了。

有几个要注意的是:
1:L为1的情况,可以通过令L=2或者标记isp[0]=false。
2:建议用long long,否则很容易在过程中超int范围,导致数组越界RE。。。

#include <iostream>
#include <cstdio>
#include <string.h> using namespace std;
const int maxn=(<<)+;
const int range=+;
bool isprime[maxn]; //标记2~2^16之间的素数
bool isp[range]; //标记L~U之间的素数,下标从0开始,对应L。
int prime[maxn]; //存储2~2^16之间的素数 int idx;
long long L,U; void init(){
idx=;
memset(isprime,true,sizeof(isprime));
for(int i=;i<maxn;i++){
if(isprime[i]){
prime[idx++]=i;
for(int j=*i;j<maxn;j+=i)
isprime[j]=false;
}
}
}
int main()
{
init();
while(scanf("%I64d%I64d",&L,&U)!=EOF){
memset(isp,true,sizeof(isp));
if(L==)
isp[]=false; //忽略L为1了,导致测试样例1 2的时候,输出结果是1和2最近,1和2最远。
//筛选出L~U之间的素数
for(int i=;i<idx;i++){
int p=prime[i];
/*
这里我RE了好几次,原因如下:
1.j一开始定义成int型,导致j*p有可能超出int范围,变成负数,这样就使得j*p-L<0。
2.L一定要设成long long型,因为l+p-1可能会超int,变成负数。。。
*/
//这里的j表示的是p的倍数,j=(L+p-1)/p表示的是第一个大于等于L的倍数
for(long long j=(L+p-)/p;j*p<=U;j++){
if(j>){
isp[j*p-L]=false;
}
}
}
int mina,minb,mindis=,maxa,maxb,maxdis=;
int a,b;
bool first=true;
for(int i=;i<=U-L;i++){
if(isp[i]){
if(!first){
b=i;
if(b-a<mindis){
mina=a;
minb=b;
mindis=b-a;
}
if(b-a>maxdis){
maxa=a;
maxb=b;
maxdis=b-a;
}
a=b;
}
else{
first=false;
a=i;
}
}
}
if(!maxdis){
printf("There are no adjacent primes.\n");
}
else{
//注意:这里输出时long long格式,因为L是long long型
printf("%I64d,%I64d are closest, %I64d,%I64d are most distant.\n",mina+L,minb+L,maxa+L,maxb+L);
}
}
return ;
}

POJ 2689 Prime Distance (素数筛选法,大区间筛选)的更多相关文章

  1. poj 2689 Prime Distance(大区间素数)

    题目链接:poj 2689 Prime Distance 题意: 给你一个很大的区间(区间差不超过100w),让你找出这个区间的相邻最大和最小的两对素数 题解: 正向去找这个区间的素数会超时,我们考虑 ...

  2. poj 2689 Prime Distance(大区间筛素数)

    http://poj.org/problem?id=2689 题意:给出一个大区间[L,U],分别求出该区间内连续的相差最小和相差最大的素数对. 由于L<U<=2147483647,直接筛 ...

  3. poj 2689 Prime Distance (素数二次筛法)

    2689 -- Prime Distance 没怎么研究过数论,还是今天才知道有素数二次筛法这样的东西. 题意是,要求求出给定区间内相邻两个素数的最大和最小差. 二次筛法的意思其实就是先将1~sqrt ...

  4. [ACM] POJ 2689 Prime Distance (筛选范围大素数)

    Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12811   Accepted: 3420 D ...

  5. POJ 2689 Prime Distance(素数筛选)

    题目链接:http://poj.org/problem?id=2689 题意:给出一个区间[L, R],找出区间内相连的,距离最近和距离最远的两个素数对.其中(1<=L<R<=2,1 ...

  6. poj 2689 Prime Distance(区间筛选素数)

    Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9944   Accepted: 2677 De ...

  7. 数论 - 素数的运用 --- poj 2689 : Prime Distance

    Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12512   Accepted: 3340 D ...

  8. POJ 2689 Prime Distance (素数+两次筛选)

    题目地址:http://poj.org/problem?id=2689 题意:给你一个不超过1000000的区间L-R,要你求出区间内相邻素数差的最大最小值,输出相邻素数. AC代码: #includ ...

  9. 题解报告:poj 2689 Prime Distance(区间素数筛)

    Description The branch of mathematics called number theory is about properties of numbers. One of th ...

随机推荐

  1. webpack 学习笔记 02 快速入门

    webpack 的目标 将依赖项分块,按需加载. 减少web app的初始加载时间. 使每一个静态集合都能够作为组件使用. 有能力集成第三方库,作为组件使用. 高度可配置化. 适用于大型项目. INS ...

  2. 内核同步机制 RCU

    Evernote分享地址:http://www.evernote.com/shard/s133/sh/8807320d-f54d-4e90-a31b-e2a3d35509ee/7539dc3931b8 ...

  3. spring与mysql整合数据源的配置

    需要解决两点,数据源的配置交给spring完成,事务管理交个spring来管理. <context:property-placeholder location="classpath:c ...

  4. hdu 4217 Data Structure?/treap

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4217 可用线段树写,效率要高点. 这道题以前用c语言写的treap水过了.. 现在接触了c++重写一遍 ...

  5. 教你怎么安装Redis

    以下命令以root用户运行:#cd /tmp/#wget http://redis.googlecode.com/files/redis-2.6.11.tar.gz#tar xzf redis-2.6 ...

  6. php匿名函数小示例

    <?php //$fun = function($params){ // echo $params; //}; // //$fun('aa'); //例一 //在普通函数中定义一个匿名函数 // ...

  7. MVC4.0 使用Form认证,自定义登录页面路径Account/Login

    使用MVC4.0的时候,一般遇到会员登录.注册功能,我们都会使用Form认证,给需要身份验证的Action进行授权(需要登录后才能访问的Action添加[Authorize]属性标签),登录.注册的时 ...

  8. ExtJS MVC学习手记

    开始学习ExtJS的MVC了.这篇文章仅是用来做一个目录,为自己这个阶段的学习内容做个索引. 手记涉及的文章: EXTJS MVC结构(译自ExtJS4.0文档中的<MVC Architectu ...

  9. [转]Linux下的图形库介绍

    [转]Linux 下的图形库介绍 http://blog.csdn.net/gogor/article/details/5925925 在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念: ...

  10. R语言 如何为图片添加文字说明(转载)

    转载:(中文翻译者)[http://blog.csdn.net/chen790646223/article/details/49766659] (原文链接)[http://datascienceplu ...