繁体   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