新聞中心
素?cái)?shù)是只有兩個(gè)正因數(shù)(1和它本身)的自然數(shù),例如2、3、5、7等,在Python中,我們可以使用一些簡(jiǎn)單的算法來(lái)求解素?cái)?shù),以下是兩種常見(jiàn)的方法:埃拉托斯特尼篩法(Sieve of Eratosthenes)和厄拉多塞篩法(Sieve of Eratosthenes)。

1、埃拉托斯特尼篩法
埃拉托斯特尼篩法是一種古老的尋找素?cái)?shù)的方法,其基本思想是從2開(kāi)始,將2的倍數(shù)剔除,然后找到下一個(gè)未被剔除的數(shù),將其倍數(shù)剔除,如此循環(huán),直到遍歷完所有小于等于給定數(shù)的數(shù)。
以下是使用埃拉托斯特尼篩法求解素?cái)?shù)的Python代碼:
def sieve_of_eratosthenes(n):
is_prime = [True] * (n + 1)
is_prime[0] = is_prime[1] = False
for i in range(2, int(n**0.5) + 1):
if is_prime[i]:
for j in range(i*i, n + 1, i):
is_prime[j] = False
return [i for i in range(n + 1) if is_prime[i]]
print(sieve_of_eratosthenes(100))
在這段代碼中,我們首先創(chuàng)建了一個(gè)布爾數(shù)組is_prime,用于標(biāo)記每個(gè)數(shù)是否為素?cái)?shù),我們從2開(kāi)始,將所有2的倍數(shù)標(biāo)記為非素?cái)?shù),接著,我們找到下一個(gè)未被標(biāo)記為非素?cái)?shù)的數(shù),將其倍數(shù)標(biāo)記為非素?cái)?shù),如此循環(huán),直到遍歷完所有小于等于給定數(shù)的數(shù),我們返回所有被標(biāo)記為素?cái)?shù)的數(shù)。
2、厄拉多塞篩法
厄拉多塞篩法是一種改進(jìn)的埃拉托斯特尼篩法,其主要思想是先找到小于等于給定數(shù)的所有素?cái)?shù),然后從大到小依次剔除合數(shù),這種方法的優(yōu)點(diǎn)是可以更快地找到素?cái)?shù)。
以下是使用厄拉多塞篩法求解素?cái)?shù)的Python代碼:
def sieve_of_eratosthenes(n):
primes = []
mark = [False] * (n + 1)
for i in range(2, n + 1):
if mark[i] == False:
primes.append(i)
mark[i] = True
for j in range(i, n + 1, i):
mark[j] = True
return primes[::1]
print(sieve_of_eratosthenes(100))
在這段代碼中,我們首先創(chuàng)建了一個(gè)布爾數(shù)組mark,用于標(biāo)記每個(gè)數(shù)是否已被標(biāo)記為合數(shù),我們從2開(kāi)始,將所有2的倍數(shù)標(biāo)記為合數(shù),接著,我們找到下一個(gè)未被標(biāo)記為合數(shù)的數(shù),將其及其倍數(shù)標(biāo)記為合數(shù),如此循環(huán),直到遍歷完所有小于等于給定數(shù)的數(shù),我們將所有被標(biāo)記為素?cái)?shù)的數(shù)逆序返回。
以上就是使用Python求解素?cái)?shù)的兩種常見(jiàn)方法,這兩種方法都很簡(jiǎn)單易懂,但在實(shí)際使用時(shí),需要根據(jù)具體的需求和場(chǎng)景選擇合適的方法。
分享文章:python如何編程求素?cái)?shù)
網(wǎng)頁(yè)鏈接:http://fisionsoft.com.cn/article/dpcsgdd.html


咨詢
建站咨詢
