洛谷P3383 【模板】线性筛素数(即欧拉筛)

2023-05-16

题目背景

本题已更新,从判断素数改为了查询第 kk 小的素数
提示:如果你使用 cin 来读入,建议使用 std::ios::sync_with_stdio(0) 来加速。

题目描述

如题,给定一个范围 nn,有 qq 个询问,每次输出第 kk 小的素数。

输入格式

第一行包含两个正整数 n,qn,q,分别表示查询的范围和查询的个数。

接下来 qq 行每行一个正整数 kk,表示查询第 kk 小的素数。

输出格式

输出 qq 行,每行一个正整数表示答案。

输入输出样例

输入 #1复制


100 5
1
2
3
4
5  

输出 #1复制


2
3
5
7
11  

说明/提示

【数据范围】
对于 100\%100% 的数据,n = 10^8n=108,1 \le q \le 10^61≤q≤106,保证查询的素数不大于 nn。

Data by NaCly_Fish.

  

这道题用埃式筛解题也不是不可以,不过应该会超时

所以这道题考察我们的应该是线性筛(即欧拉筛,下同)

而欧拉筛法的思想非常简单,就是我们要求每一个数都被且仅被其最小的质因数筛掉(这也是欧拉筛对于埃氏筛法的一个优化),这使得它的时间复杂度仅有O(n)

而有些同学可能要问了:埃式筛又是什么呢?

埃式筛的大体思想:要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。(详见百度百科)

那么代码如下:

#include <bits/stdc++.h>
using namespace std;
bool a[100000001];
/*
a数组存储筛法表(0代表不是质数,1代表是质数),并且这里要注意,因为题目输入的数据比较大,
a数组开long long或int会爆空间!
*/ 
int p[700000],s = 0;//p数组储存质数表,s储存目前p数组中有几个质数(其实就是质数表目前要赋值的下标) 
void pri(int n)//在1-n的范围内处理质数 
{
  for(int i = 2; i <= n; i++)
  {
    if(a[i] == 1)//如果a[i]是质数 
    {
      s++;//则质数表长度+1 
      p[s] = i;//再把该数字填入表中 
    }
    for(int j = 1; j <= s && i * p[j] <= n; j++)//j遍历质数表,并且i * p[j]还不能超过范围(也就是n) 
    {
      a[i * p[j]] = 0;//因为i * p[j]一定是合数 
      if(i % p[j] == 0) break;
      /*
      如果这是第一次筛掉它,就直接break
      (因为欧拉筛只被它的最小的质因子筛掉,这也是它对埃氏筛的剪枝操作)
      */ 
    }
  }
}
int main()
{
  int n,q;//n是质数范围,q是有几组数据 
  cin>>n>>q;
  memset(p,1,sizeof(a));//初始化成1(因为1代表是质数,后期在pri函数中再刷掉合数) 
  a[1] = 0;//因为1不是质数 
  pri(n);//欧拉筛 
  for(int i = 0; i < q; i++)//预处理完后再输入 
  {
    int k;
    cin>>k; 
    cout<<p[k]<<endl;//直接调用质数表中的第k个 
  }
  return 0;
} 

加油!

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

洛谷P3383 【模板】线性筛素数(即欧拉筛) 的相关文章

随机推荐

  • error: failed to run custom build command for `openssl-sys `

    error failed to run custom build command for 96 openssl sys v0 9 60 96 遇到这个问题需要安装最新的libssl包 xff0c 1 执行命令 xff1a sudo apt
  • docker gitlab/gitlab-ce 升级版本

    原因 发现服务器内存占用100 执行命令查看内存占用 ps aux head 1 ps aux grep v PID sort rn k 43 4 head 20 发现 tmp juma目录占用内存过高 但是本机目录并没有 tmp juma
  • php7操作MongoDb详解

    MongoDB的强大是不容置疑的 xff0c 目前PHP针对MongoDB的操作挺多的 xff0c 但是看的有点晕 xff0c 还是自己总结一下实在 xff0c 因为现在一直用PHP7及以上了 xff0c 所有PHP7之前的版本就不再去说明
  • 立即数

    一 概念 xff1a 通常把在 立即寻址方式 指令中给出的数称为立即数 二 判断步骤 xff1a 把数据转换成二进制 xff0c 从低到高写成 4 个一组 xff0c 最高位不够一组的补 0 xff1b 数 1 的个数 xff0c 如果大于
  • arch linux kde 安装 xrdp

    arch linux kde 安装 xrdp 前言安装环境配置安装xrdp修改配置故障排除端口查询检查防火墙鼠标指针周围出现黑框使用 KDE plasma 时出现黑屏登录到会话管理器后可能出现黑屏 参考文献 前言 我已经放弃了 xff0c
  • 在Windows上使用EDA软件——利用WSL安装IC618、SPECTRE181

    文章目录 前言一 安装WSL1 启用适用于 Linux 的 Windows 子系统2 安装所选的 Linux 分发3 检查WSL版本 二 安装前准备1 将WSL迁移到其他盘2 更换源3 安装图形界面3 1 Windows中的操作3 2 WS
  • sudo apt install ros-humble-desktop报 unable to locate package ros-humble-desktop问题解决

    1 首先我按照教程安装的Ubuntu 20 04 xff0c 执行命令 其他的指令都正常 xff0c 一直到sudo apt install ros humble desktop到这步执行后 xff0c 就无法正常下载 google和百度都
  • GitLab 中文社区版攻略

    支持的 tags 和对应的 Dockerfile 10 2 10 2 8 10 2 Dockerfile 10 3 10 3 9 10 3 Dockerfile 10 4 10 4 7 10 4 Dockerfile 10 5 10 5 7
  • windows10-Ubuntu 20.04.4 LTS-Redis 6.2.6 性能测试(1)

    我在windows10 里面安装了Ubuntu 20 04 4 LTS xff0c 然后在Ubuntu 20 04 4 LTS 安装了Redis 6 2 6 下面我要进行性能测试 首先我打开一个Ubuntu 20 04 4 LTS xff0
  • 分解质因数——mooc《零基础学Java语言》-(浙大翁凯)第七周编程题(1)

    题目内容 xff1a 每个非素数 xff08 合数 xff09 都可以写成几个素数 xff08 也可称为质数 xff09 相乘的形式 xff0c 这几个素数就都叫做这个合数的质因数 比如 xff0c 6可以被分解为2x3 xff0c 而24
  • Ubuntu 18.04系统搬家,迁移至更大容量硬盘

    Ubuntu从512G固态搬家到2T固态 注意 xff1a 我的 boot文件夹没有和Ubuntu系统其他分区放在同一个物理硬盘上 xff0c 这个设置和大多数的默认配置并不一样 xff0c 因此本文章只是个人记录而非教程 将Ubuntu
  • Windows驱动开发环境搭建(Visual Studio 2015 + WDK)

    在Win10环境下开发Windows驱动程序需要依赖WDK xff0c 微软在 WDK7600 以后就不再提供独立的内核驱动开发包了 xff0c 而是必须首先安装微软集成开发环境VisualStudio 本文将介绍如何在Win10环境下配置
  • mac如何运行php文件

    有时候 xff0c 我们下载一下资料的时候 xff0c 他会显示运行环境 xff1a PHP 这时候如果我们只是打开html文件 xff0c 那么它只是一个静态的效果 这时候我就要学会如何运行php文件了 1 网上有许多mac系统下配置ph
  • X: user not authorized to run the X server, aborting

    在Linux下使用图形界面时出现的问题 xff1a X user not authorized to run the X server aborting 错误原因为 xff1a 出于安全性的考虑 xff0c 一般用户没有使用图形界面的权限
  • 使用Docker快速安装NextCloud个人私有云盘

    最近做工厂的物联网项目 xff0c 需要将工厂仪器检测出来的excel数据自动传到中央处理服务中 xff0c 然后服务再进行分析处理 xff0c 最终采用了私有云盘的自动同步功能来实现 本人的linux系统centos8 2系统 xff0c
  • 使用QImage生成纯透明png图片

    if name 61 61 39 main 39 image 61 QImage 100 100 QImage Format RGBA8888 image fill QColor 0 0 0 0 image save 34 test png
  • 不在 sudoers 文件中。此事将被报告。

    在使用sudo命令时 xff0c 经常性会提示出 不在 sudoers 文件中 此事将被报告 的错误信息 这是因为当前登录的账号不在sudo权限里面 sudo命令可以让你以root身份执行命令 xff0c 来完成一些我们这个帐号完成不了的任
  • MySQL 8.0 忘记密码/修改root密码

    1 以管理员身份打开cmd窗口 xff0c 定位到MySQL安装目录下的bin目录 xff0c 输入net stop mysql 回车 xff0c 关闭MySQL数据库 2 输入mysqld console skip grant table
  • Powershell-批量重命名替换文件名

    需求 xff1a 工作需要临时处理大约5000 43 不同文本及视频文件名称 xff0c 用以区分标注上传文件说明事宜 思路 xff1a 考虑到文件太多无法手工单独命名 xff0c 所以想着通过Windows 自带powershell进行批
  • 洛谷P3383 【模板】线性筛素数(即欧拉筛)

    题目背景 本题已更新 xff0c 从判断素数改为了查询第 kk 小的素数 提示 xff1a 如果你使用 cin 来读入 xff0c 建议使用 std ios sync with stdio 0 来加速 题目描述 如题 xff0c 给定一个范