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)
为什么此代码将“ 2”打印为质数? (是,但不应打印出来)
2%2 == 0,所以应该跳过它...
答案 0 :(得分:2)
当num
为2时,range(2, num)
为空,因此不执行if (num % i) == 0:
检查,并且执行else
块。
答案 1 :(得分:1)
其他人注意到range(start,end)
代码中的错误。更正这一点,您的质数代码可以重写为:
lower = int(input("from:"))
upper = int(input("to:"))
for num in range(lower,upper + 1):
if num > 1:
for i in range(2,max(num,3)):
if (num % i) == 0:
break
else:
print(num)
这不是让素数引起您注意的最快方法,每个潜在素数都必须针对每个较小的数进行除数检验。取而代之的是向上计数并计算出较小数字的倍数要快得多。这样,我们只需要对每个可能的除数进行一次数学运算即可。
为了完整起见,这是一个可以有效产生素数的程序(使用Eratosthenes方法的筛子)。
#### 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,