当前位置:   article > 正文

判断素数/质数的快速算法_prime/number/list

prime/number/list

质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)。——via维基百科

朴素算法:

1.

  1. def isprime(n):
  2. """
  3. :type n:int
  4. :rtype:bool
  5. """
  6. if n==1:
  7. return False
  8. for i in range(2,n):
  9. if n%i==0:
  10. return False
  11. return True

2.

  1. import math
  2. def isPrime(n):
  3. """
  4. :type n:int
  5. :rtype:bool
  6. """
  7. if n == 1:
  8. return False
  9. for i in range(2, int(math.sqrt(n)) + 1):
  10. if n % i == 0:
  11. return False
  12. return True

 

埃氏筛法: 运算速度更快的判断素数算法

可以知道除了2(2是素数)以外的其他偶数都不是素数,除了3(3是素数)以外其他能被3整除的数都不是素数。所以一个素数的整数倍都不是素数,可以利用这一点编写算法如下:

  1. def isprime(n):
  2.     """
  3.         :type n:int
  4.         :rtype:List[int]
  5.         """
  6.     s=[True for i in range(n+1)]#首先默认所有的数都是质数
  7.     z=[]#存放质数
  8.     for i in range(2,n+1):#1不是质数
  9.         if s[i]:#判断是否为质数,如果没有被标记就是质数
  10.             z.append(i)
  11.             for j in range(i+i,n+1,i):#剔除倍数(如果是质数,质数的倍数一定不是质数)
  12.                 s[j]=False
  13.     return z

算法参考:http://t.csdn.cn/s8wOY

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/75257
推荐阅读
相关标签
  

闽ICP备14008679号