2024年前端最新欧拉筛法(线性筛)的学习理解_欧拉筛原理,2024年最新前端开发高级面试题

最后

全网独播-价值千万金融项目前端架构实战

从两道网易面试题-分析JavaScript底层机制

RESTful架构在Nodejs下的最佳实践

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

一线互联网企业如何初始化项目-做一个自己的vue-cli

思维无价,看我用Nodejs实现MVC

代码优雅的秘诀-用观察者模式深度解耦模块

前端高级实战,如何封装属于自己的JS库

VUE组件库级组件封装-高复用弹窗组件

前言

在刚接触编程语言时,对于寻找素数,第一时间想到的便是二重循环暴力查找,其复杂度O(n^2),通过循环中只判断到根号n可以优化一些,不过复杂度也达不到预期。在数论的学习中,我学到了埃氏筛法,O(nloglogn)的算法,而在一些数据范围达到1e7这样的题目中,也很难让人满意,于是我便学习了欧拉筛法,也即 O(n)的线性筛法。

埃氏筛法
  • 埃氏筛法的基本思想 :从2开始,将每个质数的倍数都标记成合数,以达到筛选素数的目的。
  • 代码 :
int visit[maxn];  
void Prime(){
    mem(visit,0);           //初始化都是素数
    visit[0] = visit[1] = 1;  //0 和 1不是素数
    for (int i = 2; i <= maxn; i++) {
        if (!visit[i]) {         //如果i是素数,让i的所有倍数都不是素数
            for (int j = i*i; j <= maxn; j += i) { 
                visit[j] = 1;
            }
        }
    }

这里有一个小优化,j 从 i * i 而不是从 i + i开始,因为 i*(2~ i-1)在 2~i-1时都已经被筛去,所以从i * i开始。

  • 埃氏筛法的缺陷 :对于一个合数,有可能被筛多次。例如 30 = 2 * 15 = 3 * 10 = 5*6……那么如何确保每个合数只被筛选一次呢?我们只要用它的最小质因子来筛选即可,这便是欧拉筛法。

欧拉筛法

  • 欧拉筛法的基本思想 :在埃氏筛法的基础上,让每个合数只被它的最小质因子筛选一次,以达到不重复的目的。
  • 代码 :
int prime[maxn];
int visit[maxn];
void Prime(){
    mem(visit,0);
    mem(prime, 0);
    for (int i = 2;i <= maxn; i++) {
        cout<<" i = "<<i<<endl;
        if (!visit[i]) {
            prime[++prime[0]] = i;      //纪录素数, 这个prime[0] 相当于 cnt,用来计数


### 最后

全网独播-价值千万金融项目前端架构实战

![](https://i-blog.csdnimg.cn/blog_migrate/8f3cd549cefb30ae69fe94f25d1cc460.png)



从两道网易面试题-分析JavaScript底层机制

![](https://i-blog.csdnimg.cn/blog_migrate/92c9538ea0cba777dbdec1b63bc3878b.png)



RESTful架构在Nodejs下的最佳实践

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

![](https://i-blog.csdnimg.cn/blog_migrate/5082ab5e06b1630756b72a497d7f9b66.png)

一线互联网企业如何初始化项目-做一个自己的vue-cli

![](https://i-blog.csdnimg.cn/blog_migrate/ebc7e25574b8eeec68d048a8b692ba60.png)



思维无价,看我用Nodejs实现MVC

![](https://i-blog.csdnimg.cn/blog_migrate/5eb150140d1c05c1ad76e95c08f8c34f.png)



代码优雅的秘诀-用观察者模式深度解耦模块

![](https://i-blog.csdnimg.cn/blog_migrate/05c8de33f48d49eb375b54cd8ed5df1f.png)

前端高级实战,如何封装属于自己的JS库

![](https://i-blog.csdnimg.cn/blog_migrate/1f7358690bba8963935831b372d672c4.png)

VUE组件库级组件封装-高复用弹窗组件

![](https://i-blog.csdnimg.cn/blog_migrate/8b152ea369a32037e16060e291060397.png)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值