素数查找器包括2次多次

时间:2017-02-07 04:22:53

标签: python for-loop

该程序列出了小于或等于给定输入的所有素数。

然后打印列表。

我无法理解为什么它包含数字2.当我第一次设计程序时,我用primes = [2]初始化列表因为我认为,因为2%2 == 0,

if n % x == 0:
    is_prime = False

会将is_prime设置为False。但是,情况似乎并非如此。

我确信range()循环中的for逻辑确实存在一些我不明白的问题。

我想我的问题是:为什么每次都将2包括在素数列表中?

import math


limit = int(input("Enter a positive integer greater than 1: "))

while limit < 2:
    limit = int(input("Error.  Please enter a positive integer greater than 1: "))

primes = []

#Check all numbers n <= limit for primeness
for n in range (2, limit + 1):
    square_root = int(math.sqrt(n))
    is_prime = True

    for x in range(2, (square_root + 1)):
        if n % x == 0:
            is_prime = False

    if is_prime:
        primes.append(n)

#print all the primes
print("The primes less than or equal to", limit, "are:")
for num in primes:
    print(num)

1 个答案:

答案 0 :(得分:1)

因为您在测试for时没有输入第二个n=2 - 循环,因此您没有设置is_prime = False

# Simplified test case:
x = 2
for idx in range(2, int(math.sqrt(x))+1): 
    print(idx)

这不是print任何内容,因为range在这种情况下是range(2, 2),因此具有零长度。

请注意,您的方法效率不高,因为:

  • 你用所有可能的除数测试每个数字,即使你已经发现它不是素数。
  • 您不会在测试中排除多个素数:如果2是素数,则2的每个倍数都不能为素数等。

找到Fastest way to list all primes below N中提到的素数真有很棒的功能 - 所以我不会进入那个。但是如果你对改进感兴趣,你可能想看看。