演算法題 篩質數(Python)

2021-10-11 04:09:27 字數 793 閱讀 7606

給定乙個正整數n,請你求出1~n中質數的個數。

輸入格式

共一行,包含整數n。

輸出格式

共一行,包含乙個整數,表示1~n中質數的個數。

資料範圍

1≤n≤10^6

輸入樣例:

8
輸出樣例:

4
方法1:誒氏篩法 o(nloglogn)

n = int(input())

st = [true]*(n+1)

cnt = 0

primes =

for i in range(2, n+1):

if st[i]:

cnt += 1

for j in range(2*i, n+1, i): st[j] = false

print(cnt)

方法2:線性篩法 o(n)

n = int(input())

st = [true]*(n+1)

cnt = 0

primes =

for i in range(2, n+1):

if st[i]:

cnt += 1

for p in primes:

if p > n//i: break

st[p*i] = false

if i % p == 0: break # i是p的倍數,就不用再繼續了

print(cnt)

演算法 質數,質因數,篩質數

質數在大於1的整數中,如果只包含1和本身這兩個約數,就被稱為質數,或者叫素數。有3中形式 由於sqrt 計算較慢。不推薦 bool is prime int n 由於i i有可能會大於n,而當n較大時,可能會爆int,從而成為負值。不推薦 bool is prime int n 推薦 試除法 boo...

質數篩演算法詳解

今天給大家講解質數篩這個演算法。在資訊競賽中,我們總是會遇到很多判斷質數的題目,那麼在這裡就由我來給大家講解一下質數篩演算法 這裡所有講的演算法都是基於篩出從 1 到 n 之間的素數的演算法 最普通的篩法,也就是將前 n 個正整數乙個乙個來判斷是否為素數,並且在判斷素數的時候要從 2 列舉到 這個數...

質數 篩質數

質數定理 1 n中質數有n ln n 個質數 按順序刪除每個數的倍數,最後剩下的就是質數。給定乙個正整數n,請你求出1 n中質數的個數。輸入格式 共一行,包含整數n。輸出格式 共一行,包含乙個整數,表示1 n中質數的個數。資料範圍 1 n 1061 n 106 輸入樣例 8輸出樣例 4 includ...