埃氏篩:篩選質數的一種演算法,用迭代的方式識別出已經找到的質數的倍數,能高效地篩選出小於一千萬的質數。讓我們去試著尋找10001個質數。具體步驟如下:
1.建立乙個連續的整數列表:用arange函式
2.篩選出p的倍數
完整**如下圖:
import numpy
lim=10**6
n=10**9
p=10001
primes=
p=2#通過列出前6個質數:2,3,5,7,11,13,我們看到第6個質數是13
#第10001個質數是多少
def check_primes(a,p):
#2.篩選出p的倍數
a=a[a%p!=0]
return a
for i in range(3,n,lim):
#1.建立乙個整數列表
a=numpy.arange(i,i+lim,2)
while len(primes)a=check_primes(a,p)
p=a[0]
print(len(primes),primes[p-1])
質數篩 埃氏篩
我們來看這麼一道問題 給定乙個範圍n,你需要處理m個某數字是否為質數的詢問 每個數字均在範圍1 n內 n 10000000,m 100000 首先很容易聯想到使用列舉法來確定題目的整體框架 for i 1 m else 關鍵在於質數判斷部分。質數的判斷問題我們可以從定義出發。質數,又稱素數,是除了1...
埃氏篩法 素數的快速篩選
埃氏篩法的的核心是 素數的倍數都不是素數。那我們執行這樣乙個策略,我們可以確定的是 2 是最小的素數,建立乙個表並將除了 0 1 外的所有數標記為素數,我們將篩選範圍內的 2 的倍數全部標記為合數 非素數 然後取出表中最小的素數,執行相同的策略 講素數的倍數標記為非素數 下圖可以完美的演示這樣乙個演...
素數的快速篩選(埃氏篩法)
要列舉n以內的素數,可以用埃氏篩法。這是乙個與輾轉相除法一樣古老的演算法。首先,將2到n範圍內的所有整數寫下來。其中最小的數字2是素數。將表中所有2的倍數都劃去。表中剩餘的最小數字是3,它不能被更小的數整除,所以是素數。再將表中所有3的倍數全都劃去。依次類推,如果表中剩餘的最小數字是m時,m就是素數...