[线筛五连]线筛素数
模板链接: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;
}
[线筛五连]线筛素数相关推荐
- 怎么区分五类线、超五类线和六类线
打个广告, ---------------------------------------------------------------------------------------------- ...
- 【如何从外观上区分网线的五类线、超五类线和六类线?】
五类线 线上写着CAT 5,传输带宽为100MHz,现在基本已经被超五类线替代. 超五类线 线上写着CAT 5e,传输带宽为1000Mb/s,已经可以支持POE技术.实际手感还是非常简陋. 六类线 线 ...
- 根据K线图与移动平均线的位置决定卖出点五绝招
根据K线图与移动平均线的位置决定卖出点卖出信号一 此信号具有以下特征: 1.移动平均线呈大幅度上升趋势. 2.经过一段上升后,移动平均线开始走平. 3.当股价由上而下跌破走平的移动平均线时,便是卖出信 ...
- 算法笔记--素数筛(朴素筛,埃式筛,欧拉筛)
素数 素数也叫质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数.如2 , 3 , 5 , 7 , 11等. 素数筛 素数筛即筛选出1~n内的素数的方法,这里介绍三种 常见的求素数 ...
- 素数筛法详解:埃氏筛和欧拉筛
文章目录 摘要 埃式筛 欧拉筛 超级详细的基础算法和数据结构合集: https://blog.csdn.net/GD_ONE/article/details/104061907 摘要 本文主要介绍埃氏 ...
- 北京地铁五号线全攻略 23座车站乘坐细节大起底
5号线就在附近,偶尔出远门需要用到,但又对车站位置不熟悉,转此帖,备用 转自 http://news.xinhuanet.com/newscenter/2007-10/06/content_68370 ...
- 三种素数筛总结——(朴素筛,埃氏筛,线性筛)
但行好事,莫问前程. 题目背景 题目:(leetcode)204.计数质数 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 . 对于这类求解素数个数有关的题目,通常采用质数筛算法. 本文不计 ...
- 一步一步教你写股票走势图——K线图五(高亮联动二)
目录 一步一步教你写股票走势图--分时图一(概述) 一步一步教你写股票走势图--分时图二(自定义xy轴) 一步一步教你写股票走势图--分时图三(对齐图表.自定义柱状图高亮) 一步一步教你写股票走势图- ...
- 超五类屏蔽双绞线和计算机电缆区别,五类线、六类线、超五类线的定义和区别...
五类线的标识是"CAT5",带宽100M ,适用于百兆以下的网:超五类线的标识是"CAT5E",带宽155M,是目前的主流产品:六类线的标识是" CA ...
- 千兆网络中——使用五类线、超五类线和六类线的区别
去年入手了一台Seagate的NAS,Central系列产品,3T存储空间.买回来后,一直没时间好好研究,直接插上就用了.内网速度一直维持在10M-15M左右.今年618换了款千兆路由器,速度瞬间提升 ...
最新文章
- LeetCode - Maximum Depth of Binary Tree
- netbackup错误之can not connect on socket(25)
- [杂谈]杂谈章2 eclipse没有(添加)“Dynamic Web Project”
- Mac-使用技巧之快捷键
- WIKI 开发工具网站收藏
- 人生苦短,我用Python!
- Eclipse的PyDev插件安装及解决安装后找不到的问题
- 服务超时 — 基本原理
- fiddler限速/弱网模拟
- WTA (winner-take-all) 与 自组织映射 SOM (self organizing map)的理解
- eclipse快捷键
- overleaf 公式_Latex的公式输入
- 一些div垂直居中的方法
- 名片微信小程序的代码,错误版本,待改正
- ffmpeg/avconv
- Flume防止重复消费——断点续传
- php让浏览器全屏,H5实现浏览器全屏API(全屏进入和全屏退出)
- 获取网页中的视频下载地址(利用抓包)
- 多传感器数据融合发展综述
- 航天信息a3连接不上服务器,航天信息睿财A3使用说明