编写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以内质数最快方法