优草派 > Python

怎么用python求素数

李明         优草派

素数是指只能被1和本身整除的数,是数学中的重要概念,也是计算机科学中常见的问题。在python中,求素数的方法有很多,本文将从多个角度分析,介绍几种常见的方法。

1.暴力枚举法

怎么用python求素数

暴力枚举法是最简单的求素数方法,其思路就是依次枚举2到n-1之间的每个数,判断其是否能整除n。如果有一个数能够整除n,那么n就不是素数,否则n就是素数。

以下是暴力枚举法的python代码实现:

def is_prime(n):

if n <= 1:

return False

for i in range(2, n):

if n % i == 0:

return False

return True

print(is_prime(5)) # True

print(is_prime(6)) # False

该方法的时间复杂度为O(n),当n很大时,会非常耗时,不适合大规模求素数。

2.优化枚举法

优化枚举法是在暴力枚举法的基础上进行的优化,其核心思想是减少不必要的计算。具体来说,只需要枚举2到sqrt(n)之间的数就可以了,因为如果n有一个大于sqrt(n)的因子,那么它就一定有一个小于sqrt(n)的因子。这样可以将时间复杂度降为O(sqrt(n))。

以下是优化枚举法的python代码实现:

import math

def is_prime(n):

if n <= 1:

return False

for i in range(2, int(math.sqrt(n))+1):

if n % i == 0:

return False

return True

print(is_prime(5)) # True

print(is_prime(6)) # False

该方法的时间复杂度虽然比暴力枚举法低,但仍然不够高效。

3.埃氏筛法

埃氏筛法是一种较快的求素数方法,其思路是从2开始,将每个素数的倍数都标记成合数,直到筛子无法再筛出任何素数为止。这个方法的时间复杂度为O(nloglogn)。

以下是埃氏筛法的python代码实现:

def sieve_of_eratosthenes(n):

primes = [True] * (n+1)

primes[0] = False

primes[1] = False

for i in range(2, int(n**0.5)+1):

if primes[i]:

for j in range(i*i, n+1, i):

primes[j] = False

return [i for i in range(2, n+1) if primes[i]]

print(sieve_of_eratosthenes(10)) # [2, 3, 5, 7]

该方法的缺点是需要维护一个布尔数组,占用空间较大。

4.线性筛法

线性筛法是一种更快的求素数方法,其思路是先将2到n之间的所有素数都求出来,然后再枚举这些素数的倍数,将它们都标记为合数。这个方法的时间复杂度为O(n)。

以下是线性筛法的python代码实现:

def linear_sieve(n):

primes = []

is_prime = [True] * (n+1)

for i in range(2, n+1):

if is_prime[i]:

primes.append(i)

for j in primes:

if i*j > n:

break

is_prime[i*j] = False

if i % j == 0:

break

return primes

print(linear_sieve(10)) # [2, 3, 5, 7]

该方法的优点是占用空间较小,可以处理更大规模的求素数问题。

  • 微信好友

  • 朋友圈

  • 新浪微博

  • QQ空间

  • 复制链接

取消
5天短视频训练营
新手入门剪辑课程,零基础也能学
分享变现渠道,助你兼职赚钱
限时特惠:0元
立即抢
新手剪辑课程 (精心挑选,简单易学)
第一课
新手如何学剪辑视频? 开始学习
第二课
短视频剪辑培训班速成是真的吗? 开始学习
第三课
不需要付费的视频剪辑软件有哪些? 开始学习
第四课
手机剪辑app哪个好? 开始学习
第五课
如何做短视频剪辑赚钱? 开始学习
第六课
视频剪辑接单网站APP有哪些? 开始学习
第七课
哪里可以学短视频运营? 开始学习
第八课
做短视频运营需要会什么? 开始学习
【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。

客服热线:0731-85127885

湘ICP备19005950号-1  

工商营业执照信息

违法和不良信息举报

举报电话:0731-85127885 举报邮箱:tousu@csai.cn

优草派  版权所有 © 2024