[英]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.