模板链接:https://www.luogu.org/problemnew/show/P3383

【模板】线性筛素数

题目描述

如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内)

输入输出格式
输入格式:

第一行包含两个正整数N、M,分别表示查询的范围和查询的个数。

接下来M行每行包含一个不小于1且不大于N的整数,即询问该数是否为质数。

输出格式:

输出包含M行,每行为Yes或No,即依次为每一个询问的结果。

输入输出样例
输入样例#1:

100 5
2
3
4
91
97

输出样例#1:

Yes
Yes
No
No
Yes

说明

时空限制:500ms 128M

数据规模:

对于30%的数据:N<=10000,M<=10000

对于100%的数据:N<=10000000,M<=100000

样例说明:

N=100,说明接下来的询问数均不大于100且不小于1。

所以2、3、97为质数,4、91非质数。

故依次输出Yes、Yes、No、No、Yes。

题解

线筛素数,是所有线性筛的基础,非常重要。

check[i]check[i]check[i]表示iii是否为素数,p[i]" role="presentation" style="position: relative;">p[i]p[i]p[i]直接记录素数。

对于每个数,枚举所有质因数乘上去,显然,这样遍历到的数都不是素数,check[i]=1check[i]=1check[i]=1。

但这样也会浪费许多时间,因为对于同一个数,它会被自己的所有质数因子遍历一次,所以我们让每个数只被自己最小的质因子筛去(即当i mod p[j]=0imodp[j]=0i\ mod\ p[j]=0时breakbreakbreak)。这样,每个数只会被遍历一次,总复杂度O(n)O(n)O(n)。

代码
#include<bits/stdc++.h>
#define R register int
#define ll long long
using namespace std;
const int M=1e7+5,N=1e7;
int p[M],n,m;
bool check[M];
void get()
{R i,j,t;check[1]=1;for(i=2;i<=n;++i){if(!check[i])p[++p[0]]=i;for(j=1;j<=p[0];++j){t=i*p[j];if(t>n)break;check[t]=1;if(i%p[j]==0)break;}}
}
void in(){scanf("%d%d",&n,&m);get();}
void ac()
{R i,a;for(i=1;i<=m;++i){scanf("%d",&a);if(check[a])puts("No");else puts("Yes");}
}
int main()
{in();ac();return 0;
}

[线筛五连]线筛素数相关推荐

  1. 怎么区分五类线、超五类线和六类线

    打个广告, ---------------------------------------------------------------------------------------------- ...

  2. 【如何从外观上区分网线的五类线、超五类线和六类线?】

    五类线 线上写着CAT 5,传输带宽为100MHz,现在基本已经被超五类线替代. 超五类线 线上写着CAT 5e,传输带宽为1000Mb/s,已经可以支持POE技术.实际手感还是非常简陋. 六类线 线 ...

  3. 根据K线图与移动平均线的位置决定卖出点五绝招

    根据K线图与移动平均线的位置决定卖出点卖出信号一 此信号具有以下特征: 1.移动平均线呈大幅度上升趋势. 2.经过一段上升后,移动平均线开始走平. 3.当股价由上而下跌破走平的移动平均线时,便是卖出信 ...

  4. 算法笔记--素数筛(朴素筛,埃式筛,欧拉筛)

    素数 素数也叫质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数.如2 , 3 , 5 , 7 , 11等. 素数筛 素数筛即筛选出1~n内的素数的方法,这里介绍三种 常见的求素数 ...

  5. 素数筛法详解:埃氏筛和欧拉筛

    文章目录 摘要 埃式筛 欧拉筛 超级详细的基础算法和数据结构合集: https://blog.csdn.net/GD_ONE/article/details/104061907 摘要 本文主要介绍埃氏 ...

  6. 北京地铁五号线全攻略 23座车站乘坐细节大起底

    5号线就在附近,偶尔出远门需要用到,但又对车站位置不熟悉,转此帖,备用 转自 http://news.xinhuanet.com/newscenter/2007-10/06/content_68370 ...

  7. 三种素数筛总结——(朴素筛,埃氏筛,线性筛)

    但行好事,莫问前程. 题目背景 题目:(leetcode)204.计数质数 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 . 对于这类求解素数个数有关的题目,通常采用质数筛算法. 本文不计 ...

  8. 一步一步教你写股票走势图——K线图五(高亮联动二)

    目录 一步一步教你写股票走势图--分时图一(概述) 一步一步教你写股票走势图--分时图二(自定义xy轴) 一步一步教你写股票走势图--分时图三(对齐图表.自定义柱状图高亮) 一步一步教你写股票走势图- ...

  9. 超五类屏蔽双绞线和计算机电缆区别,五类线、六类线、超五类线的定义和区别...

    五类线的标识是"CAT5",带宽100M ,适用于百兆以下的网:超五类线的标识是"CAT5E",带宽155M,是目前的主流产品:六类线的标识是" CA ...

  10. 千兆网络中——使用五类线、超五类线和六类线的区别

    去年入手了一台Seagate的NAS,Central系列产品,3T存储空间.买回来后,一直没时间好好研究,直接插上就用了.内网速度一直维持在10M-15M左右.今年618换了款千兆路由器,速度瞬间提升 ...

最新文章

  1. LeetCode - Maximum Depth of Binary Tree
  2. netbackup错误之can not connect on socket(25)
  3. [杂谈]杂谈章2 eclipse没有(添加)“Dynamic Web Project”
  4. Mac-使用技巧之快捷键
  5. WIKI 开发工具网站收藏
  6. 人生苦短,我用Python!
  7. Eclipse的PyDev插件安装及解决安装后找不到的问题
  8. 服务超时 — 基本原理
  9. fiddler限速/弱网模拟
  10. WTA (winner-take-all) 与 自组织映射 SOM (self organizing map)的理解
  11. eclipse快捷键
  12. overleaf 公式_Latex的公式输入
  13. 一些div垂直居中的方法
  14. 名片微信小程序的代码,错误版本,待改正
  15. ffmpeg/avconv
  16. Flume防止重复消费——断点续传
  17. php让浏览器全屏,H5实现浏览器全屏API(全屏进入和全屏退出)
  18. 获取网页中的视频下载地址(利用抓包)
  19. 多传感器数据融合发展综述
  20. 航天信息a3连接不上服务器,航天信息睿财A3使用说明

热门文章

  1. python open 函数漏洞_input()函数中的Python漏洞
  2. Shreder:线程SSH协议密码爆破工具
  3. cad统计多线段总长度插件_新手入门,学习CAD必须掌握,教你使用标注命令,绘图效率翻一倍...
  4. 简单的Swagger生产环境中屏蔽
  5. day31 模块 与包
  6. 结对-结对编程项目作业名称-需求分析
  7. 配置RMAN备份环境
  8. Java-Android 之出滚动条和卷轴页面
  9. IIS7 部署MVC 运行不了 注意事项
  10. Dubbo限流方式源码阅读