Numpy攻略 用埃氏篩篩選

2021-08-31 09:37:33 字數 616 閱讀 4531

埃氏篩:篩選質數的一種演算法,用迭代的方式識別出已經找到的質數的倍數,能高效地篩選出小於一千萬的質數。讓我們去試著尋找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就是素數...