当前位置: 首页 > news >正文

普通算法——欧拉筛

欧拉筛

思路:

  • 对欧拉筛的实现,主要是依靠一个数组模拟的栈来实现,核心思路为用栈储存已经发现的素数

  • 在之后的遍历中,即可以素数数组中的数为因数来筛出此素数的倍数

  • 遍历是以当前的 i i i 值为基数,来乘当前素数数组中的数

  • 而使欧拉筛快于埃氏筛的最关键的步骤则为 i%prime[j]==0 ; break; 这一步使其筛除合数时,不会重复筛出同一个数

    如: 2 3 4 5 6 7 8 9 10 11 12 中

    会先将2存进数组中,此时 i=2,数组中有2,所以筛去4,而此时2能被2整除,所以跳出循环

    再将3存入数组,此时 i=3…

  • 注意在循环条件时要加上 i * primes[j] <= N 不然容易发生数组越界

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;const int N = 500;
bool vis[N];
int prime[N];
int pos = 0;
int n;void Is_Prime(int p){vis[0] = vis[1] = false;for (int i = 2; i <= p; i++){if(vis[i])prime[++pos] = i;for (int j = 1; i * prime[j] <= p; j++){vis[i * prime[j]] = false;if(i % prime[j] == 0)break;//整除中断//条件i%p==0,保证合数只被最小质因子划掉//若i是质数,则最多枚举到自身中断//若i是合数,则最多枚举到自身的最小质数中断}}
}int main(){memset(vis, true, sizeof(vis));cin>>n;Is_Prime(n);for (int i = 1; i <= pos; i++)cout<<prime[i]<<" ";return 0;
}
http://www.lryc.cn/news/500614.html

相关文章:

  • 【知识科普】DNS(域名解析服务)深入解读
  • 数据结构第一弹-数据结构在不同领域的应用
  • 如何创建基于udp的客户端和服务端
  • ThinkPHP框架审计--基础
  • Java8 CompletableFuture异步编程
  • Java的Mvc整合Swagger的knife4框架
  • 分阶段构建在复杂系统中的应用:以推荐系统为例
  • 2024年12月9日历史上的今天大事件早读
  • 快捷构建AI大模型,源码自取可直接运行
  • 怎么为开源项目做贡献提PR?
  • 如何在 JavaScript 中设置定时器?
  • 【学习路线】Java
  • [GYCTF2020]Easyphp
  • JavaScript 数组的高级用法与最佳实践
  • 通信协议 http、tcp、udp
  • Scala的隐式对象和隐式类
  • 【AIGC】2016-ACCV-即时追捕:自然环境下的自动唇音同步
  • 启智畅想集装箱箱号识别算法,2台相机即可实现较高识别率
  • 让IIS支持PUT请求解决IIS里不支持PUT请求的问题405 Method Not Allowed
  • 入门级捡垃圾工作站记录
  • 2024.12.9——攻防世界ics-06
  • 微信小程序介绍-以及写项目流程(重要)
  • 国内国际标准!羊毛衫检测项目、检测要求及标准
  • MySQL知识大总结(进阶)
  • 【C语言】库函数常见的陷阱与缺陷(2):字符串转化函数
  • 渗透测试基础
  • 传奇996_53——后端ui窗口局部刷新
  • C++ constexpr vs const
  • 【达梦数据库】存储过程调用实践案例-select
  • 041_Compare_Matrix_Squre_Sum_in_MATLAB中矩阵平方和的比较