题目大意,给定l和u,求区间[l,u]内的素数中,相邻两个差最大和最小的素数
其中 u的范围达到了2e9
本质上需要找出n以内的所有素数,使用筛法。
先保存50000(大于sqrt(2e9))内的所有素数,然后再去筛出区间[l,u]内的素数(题上给定l-u<=1000000)所以可以存下所有素数
又由素数分布定理 素数个数s(n)~n/lnn并不是很大,所以找到所有素数保存在prime[]中扫一遍即可得到答案
代码如下
#include<stdio.h>
#include<string.h>
#include <algorithm>
using namespace std;
#define N 100007
bool isprime0[];
int prime0[];
long long prime[];
bool isprime[];
int num0;
int num;
long long x,y;
void setprime()
{
num=;
for(int i=;i<=;i++)
{
if(!isprime0[i])
prime0[num0++]=i;
for(int j=;j<num0&&prime0[j]*i<=;j++)
{
isprime0[i*prime0[j]]=;
if(!(i%prime0[j]))
break;
}
}
}
void setprime1()
{
memset(isprime,,sizeof(isprime));
for(int i=;i<num0;i++)
{
long long j=x/prime0[i];
while(j*prime0[i]<x)
j++;
for(j=j*prime0[i];j<=y;j+=prime0[i])
if(j/prime0[i]>)
isprime[j-x]=;
}
if(x==)
isprime[]=;
num=;
for(long long i=;i<=y-x;i++)
{
if(!isprime[i])
prime[num++]=x+i;
}
}
int main()
{
setprime();
while(scanf("%I64d%I64d",&x,&y)!=EOF)
{
setprime1();
long long a,b,c,d;
long long mi=,ma=;
if(num<)
{
puts("There are no adjacent primes.");
continue;
}
for(int i=;i+<num;i++)
{
long long p=prime[i+]-prime[i];
if(p<mi)
{
a=prime[i];
b=prime[i+];
mi=p;
}
if(p>ma)
{
c=prime[i];
d=prime[i+];
ma=p;
}
}
printf("%I64d,%I64d are closest, %I64d,%I64d are most distant.\n",a,b,c,d);
}
return ;
}

poj2689:素数筛的更多相关文章

  1. POJ2689:Prime Distance(大数区间素数筛)

    The branch of mathematics called number theory is about properties of numbers. One of the areas that ...

  2. Help Hanzo (素数筛+区间枚举)

    Help Hanzo 题意:求a~b间素数个数(1 ≤ a ≤ b < 231, b - a ≤ 100000).     (全题在文末) 题解: a~b枚举必定TLE,普通打表MLE,真是头疼 ...

  3. 素数筛 poj 2689

    素数筛 #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; ...

  4. BestCoder Round #85 hdu5778 abs(素数筛+暴力)

    abs 题意: 问题描述 给定一个数x,求正整数y,使得满足以下条件: 1.y-x的绝对值最小 2.y的质因数分解式中每个质因数均恰好出现2次. 输入描述 第一行输入一个整数T 每组数据有一行,一个整 ...

  5. poj 3048 Max Factor(素数筛)

    这题就是先写个素数筛,存到prime里,之后遍历就好,取余,看是否等于0,如果等于0就更新,感觉自己说的不明白,引用下别人的话吧: 素数打表,找出20000之前的所有素数,存入prime数组,对于每个 ...

  6. Codeforces Round #257 (Div. 1) C. Jzzhu and Apples (素数筛)

    题目链接:http://codeforces.com/problemset/problem/449/C 给你n个数,从1到n.然后从这些数中挑选出不互质的数对最多有多少对. 先是素数筛,显然2的倍数的 ...

  7. Light oj 1197 - Help Hanzo (素数筛技巧)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1197 给你a和b求a到b之间的素数个数. 先在小区间素数筛,大区间就用类似素数筛的想法 ...

  8. 素数筛&&欧拉筛

    折腾了一晚上很水的数论,整个人都萌萌哒 主要看了欧拉筛和素数筛的O(n)的算法 这个比那个一长串英文名的算法的优势在于没有多次计算一个数,也就是说一个数只筛了一次,主要是在%==0之后跳出实现的,具体 ...

  9. SDUT Fermat’s Chirstmas Theorem(素数筛)

    Fermat's Chirstmas Theorem Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 In a letter ...

  10. ACdream 1112 Alice and Bob (sg函数的变形+素数筛)

    题意:有N个数,Alice 和 Bob 轮流对这些数进行操作,若一个数 n=a*b且a>1,b>1,可以将该数变成 a 和 b 两个数: 或者可以减少为a或b,Alice先,问谁能赢 思路 ...

随机推荐

  1. [每日一题] 11gOCP 1z0-053 :2013-09-30 ASMCMD.......................................................8

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12206095 正确答案:BCD 为了使ASM文件管理更简单,Oracle提供了一个命令实用 ...

  2. 远程连接mysql

    win系统下,连接别人的mysql或者让别人链接自己的mysql: 打开命令行cmd 进入mysql: mysql -u root -p mysql>use mysql;  mysql>s ...

  3. python游戏编程——跟13岁儿童学编程

    python爬虫基本告一段落,琢磨搞点其他的,正好在网上看到一个帖子,一个外国13岁小朋友用python写的下棋程序,内容详细,也有意思,拿来练手. 13岁啊.. 我这年纪还在敲 dir啥的吧 想到原 ...

  4. 【C#通用类】日志记录类

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  5. oracle tkprof 工具详解

    oracle  tkprof 工具详解 今天是2013-09-26,进行tkprof工具使用学习,在此记录一下笔记: 一)查看需要跟踪会话信息: select s.sid,s.serial#,s.us ...

  6. Comprehensive learning path – Data Science in Python深入学习路径-使用python数据中学习

    http://blog.csdn.net/pipisorry/article/details/44245575 关于怎么学习python,并将python用于数据科学.数据分析.机器学习中的一篇非常好 ...

  7. VritualBox 中Debian安装tool

    VritualBox 中Debian安装tool 环境 Debian 8 VirtualBox 配置Debian的源 #163源 deb http://mirrors.163.com/debian/ ...

  8. (转)SQL Server 2008怎样编辑200行以上的数据

    刚换SQL Server2008 不久,感觉运行速度.编辑提示都比05版的提升不少,但是在维护考试系统中遇到一个05中没有的问题:05中有“打开表”可以编辑所有数据行,到了08变成了“打开前1000行 ...

  9. (转)SQL Server 2005附加2008的数据库

    1. 生成for 2005版本的数据库脚本  2008 的manger studio  -- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例  -- 右键要转到2005 ...

  10. Action<T> 和 Func<T> 委托

    概述: 除了为每个参数和返回类型定义一个新委托类型之外,可以使用Action<T> 和 Func<T> 委托. Action<T> Action<T>委 ...