1. 程式人生 > >常見素書篩選方法原理和Python實現

常見素書篩選方法原理和Python實現

1. 普通篩選(常用於求解單個素數問題)

自然數中,除了1和它本身以外不再有其他因數。

import math

def func_get_prime(n):
    func = lambda x: not [x%i for i in range(2, int(math.sqrt(x)) + 1) if x%i ==0]
    return filter(func, range(2,n+1))

print(list(func_get_prime(100)))

2. Wilson定理(常用與數比較小的情況)

對於一個任意整數n>1,當且僅當n是一個素數時,(n-1)!+1能夠被n整除

import math

def prime_of_Wilson(n):
    func = lambda x: True if (math.factorial(x-1)+ 1) % x == 0  else False
    return list(filter(func, range(2,101)))

print(prime_of_Wilson(100))

3. 埃拉托色尼篩演算法(優化了求解範圍素數問題)

埃拉托色尼演算法工作原理:

1.假定範圍內的所有的數都是素數

2.我們從2開始,只要是2的倍數我們就認為該數不是素數,打標處理

3.直到判斷到n為止我們就可以將所有的非素數打上標記,從而確定了所有的非素數

import math

def prime_of_eratosthenes(n):
    primes= [True]*n

    for p in range(2, math.ceil(math.sqrt(n))):
        if primes[p]:
            for i in range(p * 2, n, p):
                primes[i] = False
    primes = [index + 2 for index, element in enumerate(primes[2:]) if element]
    return primes

print(prime_of_eratosthenes(100))