0
点赞
收藏
分享

微信扫一扫

algorithm: 质数生成

mm_tang 2022-12-04 阅读 155


编写hash函数需要判断质数,这里记录下~
质数生成:
1.欧几里得筛法:要得到2-n的所有质数,

  • 写下2-n的所有整数,nums
  • for i
  • 找到数列中最小的当前数x=nums[i],删掉所有x的倍数
  • 剩下的就是质数

2.试除法:依次检验2-n-1能否有整除n的数

  • 对于n/2到n-1显然不能整除n,所以只需要2-n/2试除
  • 进一步优化,假设n可以被m整除 n=l*m m<sqrt(n) l>sqrt(n),那么是否不需要判断l了呢,l是大于sqrt(n)的数

def prime(n=10000):
primes = [2]*n
primes[1] = 3
idx = 2
# 质数不可能为偶数,所以以2为间隔
for i in range(5, n, 2):
sqrtn = int(pow(i, 0.5))
j = 1
while primes[j] <= sqrtn:
if i % primes[j] == 0: break
j += 1
if primes[j] > sqrtn:
primes[idx] = i
idx += 1
return primes

​​生成10000以内质数最快方法​​


举报

相关推荐

0 条评论