常見素書篩選方法原理和Python實現
阿新 • • 發佈:2018-12-12
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))