簡體   English   中英

Python-為什么這個素數檢查算法不起作用?

[英]Python - Why doesn't this prime number checking algorithm work?

我有我編寫的以下python代碼:

from math import *

limit = 100000
primes = [2]

for i in range(3, limit+1, 2):
    is_prime = True
    for j in range(3, floor(sqrt(i)), 2):
        if i % j == 0:
            is_prime = False
            break
    if is_prime: primes.append(i)

print(len(primes))

它說有9676個質數小於100000,應為9592。如果我僅用i替換floor(sqrt(i)) ,則給出正確的答案,但是速度非常慢。 為什么我的算法不起作用?

i == 9為例。 范圍如下:

for j in range(3, floor(sqrt(i)), 2):

評估為:

for j in range(3, 3, 2):

...這是一個空列表,可防止排除非素數9。 您需要提高一點以確保考慮平方根:

for j in range(3, floor(sqrt(i)) + 1, 2):

您包含的質數與其他質數的平方-我將代碼中的sqrt范圍定義更改為:

from math import *

limit = 100000

primes = [2]

for i in range(3, limit+1, 2):
    is_prime = True
    for j in range(3, floor(sqrt(i))+1, 2):
        if i % j == 0:
            is_prime = False
            break
    if is_prime: primes.append(i)

print(len(primes))

導致發現9592個素數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM