ruye07

导航

素数判断+埃氏筛+线性筛

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

posted on 2026-09-01 15:48  ruye07  阅读(5)  评论(0)    收藏  举报