蓝桥杯python省赛备战day1练习课--埃氏筛和欧拉筛--2523范围内最接近的两个质数-枚举算法刷题学习笔记2--leetcode

写在前面的话:

大家好,我是一名正在努力学习数据结构和算法的新手。这篇文章是我在学习python的各类数据结构以及基础算法过程中的一些笔记和心得,希望能和同样在学习该方面知识的朋友们分享。由于我的知识有限,文章中可能存在错误或不准确的地方,欢迎大家在评论区提出建议和指正。我非常期待大家的反馈,以便我能不断学习和进步。同时,我也会在文章中注明参考的资料,以示对原作者的尊重。

PS:本帖以记录学习心得和刷题记录解析为主,没有其他大博主那么专业,但是简单易懂^-^

本贴的其他相关学习笔记资料可以通过订阅专栏获取,喜欢的小伙伴可以多多点赞+关注呀!后续会 持续更新相关资源的~

学习资源指路:

埃氏筛/欧拉筛教程以及代码实现-参考文章:欧拉筛【力扣周赛 326】LeetCode_哔哩哔哩_bilibili

leetcode 2523 题干:

这一题的核心思想还是筛选质数,用欧拉筛or埃氏筛都可以AC。只不过这一题需要考虑堆筛选出的质数再进行筛选和输出的过程。

很经典的通过while循环更新变量来依次比较大小(代码)

埃氏筛正确解法:

class Solution:
    def closestPrimes(self, left: int, right: int) -> List[int]:
        primes=[]
        data_list=[True]*(right+1)
        for i in range(2,right+1):
            if data_list[i]: #注意是列表对应的值是True,而不是整个列表!!
                primes.append(i)
                for j in range(i*i,right+1,i):
                    data_list[j]=False
        primes.append(right+1)
        primes.append(right+1)
        primes2=[i for i in primes if i >=left]
        p=q=-1
        i=0
        while primes2[i+1]<=right:
            if p<0 or primes2[i+1]-primes2[i]<p-q:
                p,q=primes2[i+1],primes2[i]
            i+=1
        return [q,p]
        
        

欧拉筛正确解法:

class Solution:
    def closestPrimes(self, left: int, right: int) -> List[int]:
        primes=[]
        data_list=[True]*(right+1)
        for i in range(2,right+1):
            if data_list[i]: #注意是列表对应的值是True,而不是整个列表!!
                primes.append(i)
            for p in primes:
                if p*i>right:
                    break
                data_list[p*i]=False
                if i%p==0:
                    break
        primes.append(right+1)
        primes.append(right+1)
        primes2=[i for i in primes if i >=left]
        p=q=-1
        i=0
        while primes2[i+1]<=right:
            if p<0 or primes2[i+1]-primes2[i]<p-q:
                p,q=primes2[i+1],primes2[i]
            i+=1
        return [q,p]
        
        

最后,感谢每一位阅读这篇文章的朋友,你们的反馈对我来说非常宝贵。如果有任何问题或建议,请随时告诉我。让我们一起学习和进步吧!如果您喜欢我的内容,别忘了点赞和关注哦,我会定期分享更多有价值的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值