传送门

一道挺有趣的。

第一眼以为每个数都用miller_rabin判一次,但感觉会被卡时间啊。

继续分析发现可以晒出sqrt(r)中的所有素数,然后用类似埃式筛法的方法晒出[l,r]" role="presentation" style="position: relative;">[l,r][l,r]之间的素数。

然后就没了。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define N 1000005
#define ll long long
using namespace std;
bool f[N];
ll pri[150005],vis[150005],tot=0;
inline void init(ll len){
    for(ll i=2;i<=len;++i){
        if(!vis[i])pri[++tot]=i;
        for(ll j=1;j<=tot;++j){
            ll k=pri[j]*i;
            if(k>len)break;
            vis[k]=1;
            if(i%pri[j]==0)break;
        }
    }
}
inline void check(ll l,ll r){
    memset(f,1,sizeof(f));
    if(l==1)f[0]=0;
    for(ll i=1;pri[i]*pri[i]<=r;++i){
        ll tmp=pri[i];
        for(ll j=(l/tmp)*tmp;j<=r;j+=tmp){
            if(j<l||j==tmp)continue;
            f[j-l]=0;
        }
    }
}
int main(){
    init(50000);
    ll l,r;
    while(~scanf("%lld%lld",&l,&r)){
        check(l,r);
        ll cnt=0,tmp,mx=0,mn=1e9,pos,mx1,mx2,mn1,mn2;
        for(ll i=0;i<=r-l;++i){
            if(f[i]){
                ++cnt;
                if(cnt>=2){
                    tmp=i-pos;
                    if(tmp>mx)mx=tmp,mx1=pos,mx2=i;
                    if(tmp<mn)mn=tmp,mn1=pos,mn2=i;
                }
                pos=i;
            }
        }
        if(cnt>=2)printf("%lld,%lld are closest, %lld,%lld are most distant.\n",mn1+l,mn2+l,mx1+l,mx2+l);
        else printf("There are no adjacent primes.\n");
    }
    return 0;
}

2018.09.01 poj2689 Prime Distance(埃式筛法)的更多相关文章

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

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

  2. poj2689 Prime Distance题解报告

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

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

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

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

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

  5. 解题报告:poj2689 Prime Distance

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

  6. POJ 2689 - Prime Distance - [埃筛]

    题目链接:http://poj.org/problem?id=2689 Time Limit: 1000MS Memory Limit: 65536K Description The branch o ...

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

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

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

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

  9. POJ2689 Prime Distance 质数筛选

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

随机推荐

  1. sqlserver分布式 用触发器插入数据

    这个月总公司收购了一家小公司,这家小公司的数据库用的是32位的 Sql2000 ,已经使用很长一段时间了,系统也比较稳定.本着节约成本的原则,总公司保留原公司的一套管理系统,但要求重要数据每天上传到总 ...

  2. Eclipse 安装JavaEE插件

    Oxygen版Eclipse 导入项目会自动安装你项目需要的一些插件,但是有时候会安装失败,需要手动安装: 这里以Dynamic Web Project项目为例 打开Eclipse,依次选择Help ...

  3. 表单如何与Servlet控制器关联

    <form action="loing.do" method="post">                <div>          ...

  4. virtual abstract override new 几点学习

    1.Vitual方法和普通方法区别为:继承其的子类可以用override/new在重载此方法,也可以不重载其方法,有方法体(可以写语句),override修饰则调用子类方法2.abstract类中抽象 ...

  5. Python基础语法题库

    引言: 语法练习包括Python基础语法.数据类型.字符编码和简单文件操作等内容. 正文(参考答案附录在题目下方): 1.Python 里用来告知解释器跳过当前循环中的剩余语句,然后继续进行下一轮循环 ...

  6. VS Code常用快捷键总结

    目录: 1.主命令框 2.常用快捷键   (1) 编辑器与窗口管理   (2) 代码编辑     <1> 格式调整     <2> 光标相关     <3> 重构代 ...

  7. 兼容当前五大浏览器的渐变颜色背景gradient的写法

    <style type="text/css" media="screen"> #gradient { width: 200px; height: 2 ...

  8. Django1.8:403错误:CSRF verification failed. Request aborted.

    问题:Django 403错误:CSRF verification failed. Request aborted.     原因:需要加cookie验证 解决方法: 1.在view.py中增加 fr ...

  9. 【校招面试 之 C/C++】第7题 C++构造函数不能是虚函数的原因

    1.虚拟函数调用只需要“部分的”信息,即只需要知道函数接口,而不需要对象的具体类型.但是构建一个对象,却必须知道具体的类型信息.如果你调用一个虚拟构造函数,编译器怎么知道你想构建是继承树上的哪种类型呢 ...

  10. Django的models介绍

    我们一般会在创建表的类中写一个__str__方法,就会为为了打印这个对象不会打印一大堆的对象的内存地址,而是我们想要他返回的信息,方便我们更直观的知道这个对象是谁,方便显示.比如下面的例子 from ...