1.素数判断
点击查看代码
def is_prime(num):
if num < 2:
return False
for i in range(2, int(math.sqrt(num)) + 1):
if num % i == 0:
return False
return True
2.埃氏筛
点击查看代码
MAXN = 1000
is_prime = [True] * (MAXN + 1)
is_prime[0] = is_prime[1] = False
for i in range(2, MAXN + 1):
if is_prime[i]:
for j in range(i*i, MAXN+1, i):
is_prime[j] = False
primes = [i for i, val in enumerate(is_prime) if val]
3.线性筛质数
点击查看代码
MAX = 3000000
is_prime = [True] * (MAX + 1)
primes = []
is_prime[0] = is_prime[1] = False
for i in range(2, MAX + 1):
if is_prime[i]:
primes.append(i)
for p in primes:
if i * p > MAX:
break
is_prime[i * p] = False
if i % p == 0: #确保合数唯一标记
break
4.线性筛最小质因子
点击查看代码
N=2*10**7
minp=[0]*(N+1)
prime=[]
for i in range(2,N+1):
if minp[i]==0:
prime.append(i)
minp[i]=i
for p in prime:
if i>N//p:
break
minp[i*p]=p
if i%p==0: #最小质因数
break