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所以它应该跳过它.
发布于 2018-11-20 19:30:46
当num为2时,range(2, num)为空,因此不执行if (num % i) == 0:检查,并执行else块。
发布于 2018-11-20 20:03:13
其他人注意到了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, https://stackoverflow.com/questions/53400108
复制相似问题