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))