給定乙個正整數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...