因为最大可以达到int极限

明显直接筛选不可能完成

所以从其因子入手

因为任何不是素数的数都有除了1与其自身之外的因子

因此,我们筛出2^(31/2)≈46350之内的所有素数,以其作为因子再将题目给定区间内的所有不是素数的数标记排除

然后将素数存放在prnum这个vector集合中便于调用

在排除阶段,可以用

l=((L+prnum[i]-1)/prnum[i])*prnum[i]

计算出区间内的第一个是prnum[i]的倍数的数

注意,如果计算出来的使其本身,取倍数

再用

r=R/prnum[i]*prnum[i]

计算出最后一个是prnum[i]的倍数的数

符合条件时,从l到r,每次加prnum[i],标记出所有以prnum[i]为因子的数

因为无法直接开数组标记到大数

但又因为R-L≤1000000

所以可以对位置进行转换

标记时取-L+1,取出时取-1+L

最后将区间内的素数取出放在ans这个vector集合内,对答案进行判断即可

(注意特殊情况的判断)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> prnum,ans;
bool prim[],ar[];
int main(){
ll L,R,i,j,cnt,l,r,mxdis,mndis,mxn1,mxn2,mnn1,mnn2,d;
scanf("%lld%lld",&L,&R);
memset(prim,true,sizeof prim);
prim[]=prim[]=false;
for(i=;i<=;i++)
if(prim[i])
for(j=*i;j<=;j+=i)
prim[j]=false;//埃氏筛法
prnum.push_back();
for(i=;i<=;i+=)
if(prim[i])
prnum.push_back(i);//将素数放置在prnum内
cnt=prnum.size();
memset(ar,true,sizeof ar);
if(L==)
ar[]=false;
for(i=;i<cnt;i++){
l=((L+prnum[i]-)/prnum[i])*prnum[i];
if(l==prnum[i])//如果计算得出的l恰好为第i个素数本身,跳过它,取其倍数
l+=l;
if(l>R)
continue;
r=R/prnum[i]*prnum[i];
for(j=l;j<=r;j+=prnum[i])
ar[j-L+]=false;//标记
}
for(i=;i<=R-L+;i++)
if(ar[i])
ans.push_back(i-+L);//将指定区间内的所有素数提出
cnt=ans.size();
if(cnt<)
puts("There are no adjacent primes.");
else{
mndis=mxdis=ans[]-ans[];
mxn1=mnn1=ans[];
mxn2=mnn2=ans[];
for(i=;i<cnt;i++){
d=ans[i]-ans[i-];
if(d>mxdis){
mxdis=d;
mxn1=ans[i-];
mxn2=ans[i];
}
if(d<mndis){
mndis=d;
mnn1=ans[i-];
mnn2=ans[i];
}
}
printf("%lld,%lld are closest, %lld,%lld are most distant.\n",mnn1,mnn2,mxn1,mxn2);
} return ;
}

ZJNU 1223 - 素数距离——高级的更多相关文章

  1. nyoj 24 素数距离问题

    素数距离问题 时间限制:3000 ms  |            内存限制:65535 KB 难度:2   描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度. ...

  2. 素数距离问题_ny_24.java

    素数距离问题 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 2   描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距 ...

  3. ny24 素数距离的问题 筛选法求素数

    素数距离问题时间限制:3000 ms  |  内存限制:65535 KB难度:2 描述    现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素 ...

  4. nyoj 素数距离

    素数距离问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度 ...

  5. 水题(素数表)NYOJ素数距离

                描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数,则输出左侧的值及相应距离. 如果输入的整数本身就是素数,则输 ...

  6. ZJNU 1217 - 航线问题——高级

    将所有航线的其中一边排序后,另一边进行类dp 定义一个数组c,c[i]表示在所有能够开通i条航线的组合中,位置序号最大的那条航线的序号的最小值 比如下面一个样例 1 3 2 4 3 1 4 2 此时对 ...

  7. ZJNU 1205 - 侦探推理——高级

    双层枚举嫌疑犯与当日是星期几,统计真话与假话是否满足题意 注意 fake<=N&&fake+neutral>=N 即假话数量不大于N,假话加上没用的废话数量不小于N (注意 ...

  8. NYOJ 24 素数的距离问题

    素数的距离问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描写叙述 如今给出你一些数.要求你写出一个程序,输出这些整数相邻近期的素数,并输出其相距长度.假设左右有等距离长 ...

  9. CodeForces937B:Vile Grasshoppers(素数性质)

    The weather is fine today and hence it's high time to climb the nearby pine and enjoy the landscape. ...

随机推荐

  1. msf中arp_sweep使用报错:usbmon1:ERROR while getting interface flags:no such device

    在许多的工具使用中,会出现很多的错误,要养成先思考再去寻找帮助的习惯 在用use命令使用arp_sweep模块的时候爆出错误:usbmon1:ERROR while getting interface ...

  2. java基础源码 (2)--StringBuilder类

    Serializable(接口): 是一个IO的序列化接口,实现了这个接口,就代表这个类可以序列化或者反序列化,该接口没有方法或者字段,仅用于标识可串行话的语义. Appendable(接口): /* ...

  3. 前端第一篇---前端基础之HTML内容

    前端基础之HTML内容 阅读目录(Content) 一.HTML初识 1.web服务本质 2.HTML是什么 3.HTML不是什么 二.HTML文档结构 三.HTML标签格式 四.HTML注释 五.H ...

  4. caffe 官方demo python api

    Jupyter https://nbviewer.jupyter.org/github/BVLC/caffe/blob/master/examples/net_surgery.ipynb 涉及: - ...

  5. Windows操作系统安装JDK环境

    Windows操作系统安装JDK环境 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. Java常见的术语 1>.什么是JVM  只要在需要运行Java应用程序的操作系统上 ...

  6. c++ opencv 动态内存

    1.CvMemStorage定义动态内存存储器   内存存储器是一个用来存储诸如序列.轮廓.图形和子划分等动态增长数据结构的底层结构 2.示例 CvMemStorage *mems = cvCreat ...

  7. eclipse的重要快捷键

    1.快速修正:ctrl + 1 2.单词补全:alt + / 3.查看轮廓:ctrl + o 4.打开eclipse中工作区的资源: ctrl + shift + r 它可以打开当前eclipse的工 ...

  8. pppd调试心得.md

    描述 pppd是用于驱动3g模块的一种方式,其本质是和运营商APN协商,建立连接 其与运营商之间使用ppp协议,而用户在应用层使用系统提供的socket即可,从而忽略底层使用的时何种接口的设备,避免因 ...

  9. filebeat+redis+logstash+elasticsearch基本配置--适用于6.4版本

    filebeat配置: filebeat.inputs:- type: log enabled: true paths: - /opt/xxxx.log fields:                ...

  10. 吴裕雄--天生自然TensorFlow2教程:张量限幅

    import tensorflow as tf a = tf.range(10) a # a中小于2的元素值为2 tf.maximum(a, 2) # a中大于8的元素值为8 tf.minimum(a ...