题意:求[a, b]之间差最大/小的相邻素数。

0 < a, b < 2^32, 0 < b - a <= 1e6

首先发现a,b很大,以至于无法求出素数来。

然后就考虑退而求次,求出sqrt(b)以内的素数。

发现可以枚举[a, b]之间的数,还开的下一个vis数组。

然后考虑筛去所有合数。

用sqrt(b)以内的素数筛合数即可。

有两个点要注意:

1,b可能等于2147483647,故for循环里面要写成 i <= b && i > 0

2,注意1不是质数,所以a == 1时vis[0] = 1

 #include <cstring>
#include <cstdio>
typedef long long LL;
const int N = ;
LL INF = ; int a, b, top, p[N];
bool vis[N]; inline void solve() {
memset(vis, , (b - a + ) * sizeof(bool));
for(int i = ; i <= top && p[i] * p[i] <= b; i++) {
int j = (a / p[i]) * p[i];
if(j < a) {
j += p[i];
}
if(j == p[i]) {
j += p[i];
}
for(; j <= b && j > ; j += p[i]) {
vis[j - a] = ;
}
}
if(a == ) {
vis[] = ;
} int last = ;
int c = , d = ;
for(int i = a; i <= b && i > ; i++) {
if(vis[i - a]) {
continue;
}
if(!d) {
d = i;
}
else if(!c) {
c = d;
d = i;
last = d;
}
else {
if(i - last < d - c) {
c = last;
d = i;
}
last = i;
}
}
if(!c) {
puts("There are no adjacent primes.");
return;
}
printf("%d,%d are closest, ", c, d);
last = c = d = ;
for(int i = a; i <= b && i > ; i++) {
if(vis[i - a]) {
continue;
}
if(!d) {
d = i;
}
else if(!c) {
c = d;
d = i;
last = d;
}
else {
if(i - last > d - c) {
c = last;
d = i;
}
last = i;
}
}
printf("%d,%d are most distant.\n", c, d);
return;
} inline void getp() {
for(int i = ; 1ll * i * i <= INF; i++) {
if(!vis[i]) {
p[++top] = i;
}
for(int j = ; j <= top && 1ll * i * p[j] * i * p[j] <= INF; j++) {
vis[i * p[j]] = ;
if(i % p[j] == ) {
break;
}
}
}
return;
} int main() {
getp();
while(scanf("%d%d", &a, &b) != EOF) {
solve();
} return ;
}

AC代码

poj2689 Prime Distance的更多相关文章

  1. POJ2689 Prime Distance(数论:素数筛选模板)

    题目链接:传送门 题目: Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: Accepted: Des ...

  2. POJ-2689 Prime Distance (两重筛素数,区间平移)

    Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13961   Accepted: 3725 D ...

  3. 解题报告:poj2689 Prime Distance

    2017-10-03 11:29:20 writer:pprp 来源:kuangbin模板 从已经筛选好的素数中筛选出规定区间的素数 /* *prime DIstance *给出一个区间[L,U],找 ...

  4. POJ-2689 Prime Distance,区间素数筛法

                                                    Prime Distance 只会埃氏筛法的弱鸡今天读了读挑战程序设计120页,明白了求小区间内素数的方 ...

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

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

  6. POJ2689 - Prime Distance(素数筛选)

    题目大意 给定两个数L和U,要求你求出在区间[L, U] 内所有素数中,相邻两个素数差值最小的两个素数C1和C2以及相邻两个素数差值最大的两个素数D1和D2,并且L-U<1,000,000 题解 ...

  7. poj2689 Prime Distance题解报告

    题目戳这里 [题目大意] 给定一个区间[L,R],求区间内的质数相邻两个距离最大和最小的. [思路分析] 其实很简单呀,很明显可以看出来是数论题,有关于质数的知识. 要注意一下的就是L和R的数据范围都 ...

  8. POJ2689 Prime Distance 质数筛选

    题目大意 求区间[L, R]中距离最大和最小的两对相邻质数.R<2^31, R-L<1e6. 总体思路 本题数据很大.求sqrt(R)的所有质数,用这些质数乘以j, j+1, j+2... ...

  9. poj2689 Prime Distance(素数区间筛法)

    题目链接:http://poj.org/problem?id=2689 题目大意:输入两个数L和U(1<=L<U<=2 147 483 647),要找出两个相邻素数C1和C2(L&l ...

随机推荐

  1. 手机浏览器 - 如何消除<a>标签在点击时的蓝色底色?

    为a标签设置这个样式: a{-webkit-tap-highlight-color:transparent};

  2. 剑指offer(14)

    题目: 操作给定的二叉树,将其变换为源二叉树的镜像. 思路: 这里有个细节,我们发现,6节点的子节点在操作之后并没有发生变化,所以等会我们在交换的时候,交换的不是节点的数值,而是整个节点. 另外我们进 ...

  3. element-ui 源码解析 一

    Button组件 button.vue <template> <button class="el-button" @click="handleClick ...

  4. qtp 自动化测试桌面程序-点滴1(录制设置、共用文件)

    1 automation-record and run settings--设置录制程序 2 将function/repository 放于单独于test的文件夹中-方便多个test使用同一个仓库.函 ...

  5. Java虚拟机加载类的过程

    Java虚拟机的类加载,从class文件到内存中的类,按先后顺序需要经过加载/链接/初始化三大步骤. Java语言的类型分为两大类:基本类型(primitive types)和引用类型(referen ...

  6. 静态变量setter注入

    1.java中静态方法调用非静态成员变量.非静态方法 public class Circle { private double radius = 1.0; double getAre() { retu ...

  7. CentOS6.5内核编译

    内核源码包下载地址,戳我 1.准备并解压内核安装包:linux-4.14.6.tar.xz # .tar.xz -C /usr/src/ # cd /usr/src/linux- #查看linux-目 ...

  8. Django media 配置

    Django  media 配置 settings.py 配置  配置 media 的路径, 以及连接到主路径 还要添加一个 上下文管理 TEMPLATES = [ { 'BACKEND': 'dja ...

  9. windows 系统错误码总结

    windows 错误码大全: 操作成功完成. 功能错误. 系统找不到指定的文件. 系统找不到指定的路径. 系统无法打开文件. 拒绝访问. 句柄无效. 存储控制块被损坏. 存储空间不足,无法处理此命令. ...

  10. word 2013 题注、图注、插入图片自动修改大小、批量更新题注编号

    1 .题注 图片下面的文字说明,如  图 1.1.1 2.图注 图的标题格式,可以右键修改段落为居中,选中图片,点下此格式快捷居中等其他格式 3. 题注插入 效果 如下 4.题注自动居中对齐 先点击图 ...