欧拉筛(线性筛) & 洛谷 P3383 【模板】线性筛素数
2024-10-19 16:43:45
嗯....
埃氏筛和欧拉筛的思想都是相似的:
如果一个数是素数,那么它的所有倍数都不是素数....
这里主要介绍一下欧拉筛的思路:(欧拉筛的复杂度大约在O(n)左右...
定义一个prime数组,这个数组被称为“素数表”,里面的数都为素数;然后用一个vis数组,如果一个数不是素数,则标记为1.
然后把i从2到n进行枚举,如果它没被访问过,则将其加入素数表中;然后for循环素数表,如果i % prime[j] == 0,则break即可,
因为prime[j]作为i的一个质因数,在某一种情况下,它肯定会被筛过一次。并且注意要每次要判断i * prime[i] 是否大于n...
下面这是一个模板题:
题目链接:https://www.luogu.org/problemnew/show/P3383
思路上面讲的已经很清晰了,下面是AC代码:
#include<cstdio>
#include<iostream> using namespace std; int n, m;
int cnt;
int prime[], vis[]; inline void is_prime(){
for(int i = ; i <= n; i++){
if(!vis[i]) prime[++cnt] = i;
for(int j = ; j <= cnt; j++){
if(i * prime[j] > n) break;//判断是否越界
vis[i*prime[j]] = ;//已访问
if(i % prime[j] == ) break;//欧拉筛核心
}
}
} int main(){
scanf("%d%d", &n, &m);
is_prime();
vis[] = vis[] = ;
int z;
for(int i = ; i <= m; i++){
scanf("%d", &z);
if(vis[z]) printf("No\n");
else printf("Yes\n");
}
return ;
}
AC代码
最新文章
- ROS中DDNS的使用
- mysql5.6 忘记root密码
- WebApi Controller 分类
- ORACLE误删除ASM磁盘修复
- ThinkPHP5 隐藏接口里面的index.php
- CSS 分享
- [Everyday Mathematics]20150109
- git参考书籍
- C# Quartz.Net 定时任务的简单使用
- 学习java随笔第二篇:java开发工具——Eclipse
- Axure滚动效果实现
- C#实现环形队列
- lll
- 【转】Linux方向职业分析
- EJB3基本概念、运行环境、下载安装与运行jboss
- Python-定时爬取指定城市天气(二)-邮件提醒
- 重磅推出TabLayout高级窗口组件
- 特征脸是怎么提取的之主成分分析法PCA
- JavaScript中的原型链和继承
- Android hook神器frida(二)
热门文章
- servicestack.redis工具类
- CentOS Mysql安装配置
- static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
- [C++] any number to binary (Bit manipulation)
- Spring Data JPA初使用 *****重要********
- 爬虫框架scrapy的基本内容
- [GO]定时器的停止和重置
- 编写高质量代码改善C#程序的157个建议——建议82:Parallel简化但不等同于Task默认行为
- JavaScript执行顺序
- kafka的api操作(官网http://kafka.apache.org/documentation/#producerapi)