常見素數篩選方法原理和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))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM