POJ 2689 Prime Distance(素数区间筛法--经典题)

2023-10-29

大致题意:给定[L,R]区间,找出区间内的每个素数

数据范围 :

1<=L< R<=2,147,483,647)

R-L <=1,000,000.

R的数值太大,所以不能直接筛[0,R]的,要空间和时间优化,用到区间筛法,另外注意不能用int,因为R和L都是满int的,中间有很多细节处理会爆int的,还要注意1不是素数,所以在区间筛中要特判一下,是个易错的地方

//1160K	16MS	C++	1539B
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;


const int MAXN = 1e6+1e3;   //待筛的区间[L,R]长度
const int N = 50001;//保证大于(2^31-1)的算数平方根
bool prime[MAXN];
bool seive[N];
typedef long long ll;
int L,R,len;

void seg_seive(ll L,ll R)   //区间筛法
{
    len=R-L+1;
    for(int i=0;i<len;i++) prime[i]=1;
    if(1-L>=0) prime[1-L]=0;   //易错因为1不是素数也不是合数,这也是区间筛的一个易错bug
    for(ll i=2; i*i<=R ;i++)
    {
        if(seive[i])
        {
            for(ll j=max((ll)2,(L-1+i)/i)*i;j<=R;j+=i)  //第二个易错点,j必须从大于1,因为L可能小于i,但是seive[i]是素数。
                prime[j-L]=false;
        }
    }
}
int main()
{

    for(int i=2;i<N;i++) seive[i]=1;
    for(int i=2;i*i<N;i++)  //预处理
        if(seive[i])
            for(int j=2*i;j<N;j+=i)
                seive[j]=false;
        
    while(~scanf("%d%d",&L,&R))
    {
        seg_seive(L,R);

        int lmax,rmax,lmin,rmin;
        int mmax=-1,mmin=(1<<30);
        int t=-1;

        for(int i=0;i<len;i++)
            if(prime[i])
            {
                if(t>=0)
                {
                    if(mmax<i-t) mmax=i-t,lmax=t+L,rmax=i+L;
                    if(mmin>i-t) mmin=i-t,lmin=t+L,rmin=i+L;
                    t=i;
                }
                else t=i;
            }

        if(mmax>0) printf("%d,%d are closest, %d,%d are most distant.\n",lmin,rmin,lmax,rmax);
        else puts("There are no adjacent primes.");
    }
    return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

POJ 2689 Prime Distance(素数区间筛法--经典题) 的相关文章

  • 最大公约数和最小公倍数的关系

    联系 最大公约数 指两个或多个整数共有的约数中最大的那个 最小公倍数 指两个或多个整数共有的倍数中最小的那个 以两个整数为例 最大公约数表示为 a b 最小公倍数表示为 a b 定理 a b X a b ab a b均为整数 例题 incl
  • 基础算法题——位运算之谜(数论)

    位运算之谜 题目链接 数论 a b a xor b 2 a b 变式可得 a xor b a b 2 a b 另外还要排除两种不能被组成的情况 a b 2 a b lt 0 a xor b最小为0 不存在小于0的值 a b a b 2 a
  • 基础算法题——Harder Gcd Problem(数论、思维)

    题目 题目链接 给定一个 n 将 2 n 内的数进行一对一匹配 每个数仅能利用一次 假设 a 与 b 匹配 则 gcd a b 1 现求 2 n 内最大匹配数量 并输出匹配数对 输入 T代表输入组数 下面T行 每一行一个数字n 输出 输出最
  • 数论中的欧拉函数

    在数论中 对于一正整数 n n n 欧拉函数 n varphi n n 定义为
  • 欧拉降幂公式

    欧拉降幂公式 a b a b equiv ab a b
  • AcWing 196. 质数距离 二次筛法

    题 想求231 1范围的质数距离 那么我们可以求5e4范围中的所有质数 然后这些质数可以组成2 231 1中的所有合数 打表求5e4范围中的质数 用类似埃氏筛的方法把l到r的所有质数筛出来 由于差值不会超过 106 可以O n 扫描一遍求距
  • H . 真签到题

    题目链接 题目描述 Fibonacci 数列 f n f n 1 f n 2 前n项为1 1 2 3 5 8 给出n m 需要你计算出满足条件的对数 i j 的个数 且i lt j 条件是 1 lt gcd f i f j lt n i j
  • 过河 【状态压缩DP】+【完整的数论推导过程】

    题目链接 题意 很多人以为青蛙是要跳到石头上 一个个往后跳 问最少需要的石头数量 其实不然 题目给的样例的确也是有些坑了 青蛙每次都有跳的距离范围 题目求的是最少会跳到的石头 青蛙可以在水中起跳 它要尽可能的避开石头 也就是问抵达终点时最少
  • 牛客 · 奇♂妙拆分

    奇 妙拆分 题目描述 在遥远的米 奇 妙 妙 屋里住着一群自然数 他们没事就喜欢拆 开自己来探 究 现在他们想知道自己最多能被拆分成多少个不同的自然数 使得这些自然数相乘的值等于被拆分的数 输入描述 第 1 1 1行输入一个整数 T
  • 【BZOJ3309】DZY Loves Math

    3309 DZY Loves Math Time Limit 20 Sec Memory Limit 512 MB Submit 411 Solved 161 Submit Status Discuss Description 对于正整数n
  • uva10105(数论多项式展开公式)

    题意 多项式 x1 x2 xk n 输入n和k 0
  • 质因数分解(唯一分解定理)

    质因数分解 题目描述 多数据 给出t个数 求出它的质因子个数 数据没坑 难度降低 输入描述 Input Description 第一行 t 之后t行 数据 输出描述 t行 分解后结果 质因子个数 样例输入 2 11 6 样例输出 1 2 数
  • Integration【2019牛客暑期多校训练营(第一场)B】【待定系数法】

    链接 https ac nowcoder com acm contest 881 B 来源 牛客网 题目描述 Bobo knows that 011 x2 dx 2 0 11 x2 dx 2 Given n distinct positiv
  • The 2019 ICPC Asia Yinchuan Regional Programming Contest/2019银川区域赛 D Easy Problem(莫比乌斯反演+欧拉降幂)

    题意 给你 n m d k n m d k n m d k计算下列式子
  • 扩展欧几里得算法详解

    为了介绍扩展欧几里得 我们先介绍一下贝祖定理 即如果a b是整数 那么一定存在整数x y使得ax by gcd a b 换句话说 如果ax by m有解 那么m一定是gcd a b 的若干倍 可以来判断一个这样的式子有没有解 有一个直接的应
  • bzoj3309 DZY Loves Math

    题目链接 bzoj3309 题目大意 对于正整数n 定义f n 为n所含质因子的最大幂指数 给定正整数a b 求 ai 1 bj 1f gcd i j sum i 1 a sum j 1 b f gcd i j T lt 10000 1 l
  • 【数论基础】—— 二项式定理

    二项式定理 内容 x y n
  • 2019年第十届蓝桥杯国赛B组试题G-排列数-next_permutation枚举,模拟

    在一个排列中 一个折点是指排列中的一个元素 它同时小于两边的元素 或者同时大于两边的元素 对于一个 1 n 的排列 如果可以将这个排列中包含 t个折点 则它称为一个 t 1 单调序列 例如 排列 1 4 2 3 是一个 3 单调序列 其中
  • Two Divisors【GCD数论】

    You are given nn integers a1 a2 ana1 a2 an For each aiai find its two divisors d1 gt 1d1 gt 1 and d2 gt 1d2 gt 1 such th
  • 阶乘质因子分解(唯一分解定理)

    阶乘质因子分解 题目描述 对N 进行质因子分解 输入输出格式 输入格式 输入数据仅有一行包含一个正整数N N lt 10000 输出格式 输出数据包含若干行 每行两个正整数p a 中间用一个空格隔开 表示N 包含a个质因子p 要求按p的值从

随机推荐

  • Android调用OpenCV配置方法

    文章目录 1 环境 2 准备工作 3 开始构建示例项目 4 集成opencv库 4 1 导入opencv库 4 2 配置CMakeLists txt 4 3 代码声明及实现 4 3 运行效果 5 可能遇到的其他错误及解决方法 5 1 包冲突
  • 关于
  • 数据库应用:MySQL数据库用户管理

    目录 一 理论 1 用户管理 2 授权控制 二 实验 1 数据库用户管理 2 数据库用户授权 三 总结 一 理论 1 用户管理 1 用户信息 MySQL 中的用户信息 都存储在系统数据库 mysql 的 user 表中 use mysql
  • Python调用outlook提示:有一个程序正试图以您的名义自动发送电子邮件。是否允许操作?

    在使用Python写调用系统的outlook来发送测试结果报告的时候 发送邮件老是弹出警告 只有连续点击允许后才会发送邮件 解决办法 如果您是outlook2013的话 工具 信任中心 编程访问 选择 从不向我发任何可疑警告 即可
  • u盘上面 安装 ubuntu 系统

    u盘上面 安装 ubuntu 系统 下载 一个 Ubuntu 22 04 3 LTS 桌面版 https ubuntu com download desktop 找到一个U盘 参考文章 把 Ubuntu 装到U盘里随身携带 并同时支持 BI
  • magento2命令行大全

    在本教程中 我们将讨论Magento 2中的命令行接口 CLI 如你所知 Magento 2在bin magento添加了许多命令 当你在终端运行命令时 php bin magento 要么 bin magento 你将得到可用的Magen
  • vue修改标签页logo图片

    vue修改标签页logo图片 由于vue2和vue3的项目结构不同 所以修改方式不一样 1 vue2 首先static文件夹下放入ico图标 然后修改webpack dev conf js文件 new HtmlWebpackPlugin f
  • gitlab多分支提交自动触发jenkins pipeline(Generic Webhook Trigger)

    gitlab提交代码自动触发jenkins pipeline 1 配置jenkins 需要先安装Generic Webhook Trigger插件 获取gitlab提交的分支 赋给变量branch 加一个webhook参数 用于判断触发构建
  • 【C语言】printf的格式化指令

    2023年7月23日 周日上午 遇到的问题 今天早上看Linux编程方面的书籍时 遇到了类似下面的代码 把我给整蒙了 s 是啥 怎么后面还能跟两个参数呢 int n 5 char line Hello World printf s n li
  • matlab实现从s域变成z域、matlab实现长除法逆z变换实例

    今天在复习微型计算机控制技术这门课时 感觉还是和当初学习时一样 计算量有点大 主要是体现在 1 连续S域到离散Z域的变换 2 在画数字控制器和输出波形前对Y z 和U z 的长除法化简 介绍matlab帮助计算的方法 题目 一 连续S域到离
  • 未能加载基类的解决方案

    今天下了一个程序 想研究一下 可是打开页面时 弹出 未能加载基类 的错误 郁闷呢 后来把程序重新编译了一下 竟然好了 一 在如下目录下找到duwamish msi以后 F Program Files Microsoft Visual Stu
  • 大厂程序员出路何在?宁愿降薪也要跳槽求职者超5成

    程序员作为互联网技术的关键支撑 一直是很多人羡慕的高光职业 尤其是大厂的程序员自带光环一度成为市场上的香饽饽 但前段时间不少大厂被传出裁员 再加上疫情的影响互联网泡沫逐渐被稀释 这个话题也逐渐引起了大家的注意 在这样的背景之下 猎聘大数据研
  • C ~ 可变参数

    函数带有可变数量的参数 而不是预定义数量的参数 C 语言允许定义一个函数 根据具体的需求接受可变数量的参数 下面的实例演示了这种函数的定义 int func int statement int main func 1 2 3 func 1
  • Java 集合 相关面试题

    1 说说 List Set Queue Map 四者的区别 List 对付顺序的好帮手 存储的元素是有序的 可重复的 Set 注重独一无二的性质 存储的元素是无序的 不可重复的 Queue 实现排队功能的叫号机 按特定的排队规则来确定先后顺
  • IDEA 无限试用插件安装,适用于各个版本的 IDEA

    File gt Settings gt Plugins gt 设置 gt Manage Plugin Repositories 添加 https plugins zhile io 如图 添加之后才可以搜索到插件 IDE Eval Reset
  • MySQL基础篇-第09章_子查询

    第09章 子查询 讲师 尚硅谷 宋红康 江湖人称 康师傅 官网 http www atguigu com 子查询指一个查询语句嵌套在另一个查询语句内部的查询 这个特性从MySQL 4 1开始引入 SQL 中子查询的使用大大增强了 SELEC
  • 内网搭建maven私库

    目录 部署maven私库 Nexus 服务的配置 更新maven私库 批量上传 推荐 windows通过git导入 windows下通过java代码上传 私服使用 setting xml文件配置 pom xml文件配置 Maven 配置使用
  • Python实战:方差分析(ANOVA)

    Python实战 方差分析 ANOVA 方差分析是一种常用的统计方法 用于比较多个样本的平均值是否有差异 在Python中 我们可以使用scipy库来进行方差分析 假设我们有三组数据 分别为A B C组 每组数据有5个样本 我们要比较这三组
  • C++学习(四八四)anaconda常用命令

    安装tensorflow pip install tensorflow gpu 2 3 0 i https pypi tuna tsinghua edu cn simple pip install tensorflow 安装最新版tenso
  • POJ 2689 Prime Distance(素数区间筛法--经典题)

    大致题意 给定 L R 区间 找出区间内的每个素数 数据范围 1 lt L lt R lt 2 147 483 647 R L lt 1 000 000 R的数值太大 所以不能直接筛 0 R 的 要空间和时间优化 用到区间筛法 另外注意不能