因为最大可以达到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. SOA--基于银行系统实例分析

    阅读以下关于 Web 系统设计的叙述 [说明] 某银行拟将以分行为主体的银行信息系统,全面整合为由总行统一管理维护的银行信息系统,实现统一的用户账户管理.转账汇款.自助缴费.理财投资.贷款管理.网上支 ...

  2. HDU 5464:Clarke and problem

    Clarke and problem  Accepts: 130  Submissions: 781  Time Limit: 2000/1000 MS (Java/Others)  Memory L ...

  3. 手把手教你用Python实现“坦克大战”,附详细代码!

    小时候玩的“坦克大战”,你还记得吗? ​ 满满的回忆 ! 今天,我们使用Python以及强大的第三方库来实现一个简单的坦克大战游戏. ​ 整体效果 环境依赖 python3.7 pygame1.9.6 ...

  4. io流对数据的读写

    import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; i ...

  5. 吴裕雄--天生自然TensorFlow2教程:数据统计

    import tensorflow as tf a = tf.ones([2, 2]) a tf.norm(a) tf.sqrt(tf.reduce_sum(tf.square(a))) a = tf ...

  6. day23(023-递归练习)

    23.01_File类递归练习(统计该文件夹大小) * 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小(字节?) * * 从键盘接收一个文件夹路径 * 1,创建键盘录入对象 * 2,定义一个无限 ...

  7. linux_c_tcp_example

    server #include <stdio.h> #include <stdlib.h> #include <string.h> #include <uni ...

  8. torch.Tensor文档学习笔记

    A torch.Tensor is a multi-dimensional matrix containing elements of a single data type. 张量(torch.Ten ...

  9. 19 01 03 css 中 reset 模块 设置

    主要就是让到时候 打入代码时候  把一些bug去除   或者 让一些固有的格式取消 /* 将标签默认的间距设为0 */ body,p,h1,h2,h3,h4,h5,h6,ul,dl,dt,form,i ...

  10. 使用那各VUE的打印功能(print.js)出现多打印一个空白页的问题

    最近这段时间,用VUE写东西,有个打印功能. 百度了一下,铺天盖地的VUE打印的两种实现方法. 很感激这些千篇一律的帖子,虽然不知道他们是否真的用过,还是只是复制粘贴. 至少这些帖子告诉我,是有两个可 ...