else范围的Python素数

else范围的Python素数,python,python-3.x,algorithm,primes,Python,Python 3.x,Algorithm,Primes,为什么这个代码将“2”打印为素数?(是,但不应打印) 2%2==0,因此它应该跳过它…当num为2时,范围(2,num)为空,因此if(num%i)==0:检查不会执行,而else块将执行 当num为2时,范围(2,num)为空,因此不执行if(num%i)==0:检查,执行else块 其他人注意到范围(开始、结束)代码中的错误。纠正这一点,您的素数代码可以重写为: lower = int(input("from:")) upper = int(input("to:")) for num in

为什么这个代码将“2”打印为素数?(是,但不应打印)


2%2==0,因此它应该跳过它…

num
为2时,
范围(2,num)
为空,因此
if(num%i)==0:
检查不会执行,而
else
块将执行

num
为2时,
范围(2,num)
为空,因此不执行
if(num%i)==0:
检查,执行
else

其他人注意到
范围(开始、结束)
代码中的错误。纠正这一点,您的素数代码可以重写为:

lower = int(input("from:"))
upper = int(input("to:"))
for num in range(lower,upper + 1):
   if num > 1:
       for i in range(2,num):
           if (num % i) == 0:
               break
       else:
           print(num)
记住,这不是获得素数的最快方法,每个潜在的素数都必须作为一个可能的除数与每个较小的数进行测试。相反,向上计数和计算较小数字的倍数要快得多。这样我们只需要对每个可能的除数做一次数学运算

为了完整起见,这里有一个程序,可以有效地生成素数(使用埃拉托什尼筛法)

#####输入
下限=整数(输入(“起始:”)
上限=整数(输入(“到:”)
###代码
n=上限
素数布尔=[范围(n+1)内的i为真]
p=2

而(p*p其他人注意到
范围(开始、结束)
代码中的错误。如果要更正此错误,可以将素数代码重写为:

lower = int(input("from:"))
upper = int(input("to:"))
for num in range(lower,upper + 1):
   if num > 1:
       for i in range(2,num):
           if (num % i) == 0:
               break
       else:
           print(num)
记住,这不是得到素数的最快方法,每个可能的素数都必须与每个较小的数作为可能的除数进行测试。相反,向上计数并计算较小数的倍数要快得多。这样,我们只需要对每个可能的除数做一次数学运算

为了完整起见,这里有一个程序,可以有效地生成素数(使用埃拉托什尼筛法)

#####输入
下限=整数(输入(“起始:”)
上限=整数(输入(“到:”)
###代码
n=上限
素数布尔=[范围(n+1)内的i为真]
p=2

而(p*p当
i
为3时会发生什么?
对于范围内的i(2,num)
如果num为2,则这是empy列表,因此您不会得到2%2==0。二是质数。它只能被自身和一除。但是,我确实看到代码中的错误导致意外响应:
范围(开始,结束)
需要
结束
大于
开始
。Python的duck类型表示不会执行检查,并且不会检查if语句。我希望Python没有这样做,但不幸的是它会这样做。当范围(2,num)内的I的
I
为3时会发生什么
如果num是2,那就是empy list,所以你不会得到2%2==0。二是一个素数。它只能被自身和一除。但是,我确实看到代码中的错误导致了意外的响应:
范围(开始,结束)
需要
结束
大于
开始
。Python的duck类型意味着不会执行检查,并且不会检查您的if语句。我希望Python不会这样做,但不幸的是,它会这样做。
#### INPUTS    
lower = int(input("from:"))
upper = int(input("to:"))

### Code
n = upper
prime_booleans = [True for i in range(n+1)] 
p = 2
while (p * p <= n): 

    # Is current number a prime, eliminate the numbers that are multiples of it 
    if (prime_booleans[p] == True): 
        for i in range(p * 2, n+1, p): 
            prime_booleans[i] = False
    p += 1

# Print all prime numbers 
for p in range(lower, n): 
    if prime_booleans[p]: 
        print p,