Python 质数 for-else 范围
Python Prime Number for-else range
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 所以它应该跳过它...
当num
为2时,range(2, num)
为空,所以不进行if (num % i) == 0:
校验,执行else
块。
其他人注意到 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)
请注意,这不是获得质数的最快方法,每个潜在的质数都必须针对每个较小的数作为可能的除数进行测试。相反,向上计数并计算较小数字的倍数要快得多。这样我们只需要为每个可能的除数计算一次。
为了完整起见,这里有一个程序可以有效地产生素数(使用埃拉托色尼筛法)。
#### 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,
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 所以它应该跳过它...
当num
为2时,range(2, num)
为空,所以不进行if (num % i) == 0:
校验,执行else
块。
其他人注意到 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)
请注意,这不是获得质数的最快方法,每个潜在的质数都必须针对每个较小的数作为可能的除数进行测试。相反,向上计数并计算较小数字的倍数要快得多。这样我们只需要为每个可能的除数计算一次。
为了完整起见,这里有一个程序可以有效地产生素数(使用埃拉托色尼筛法)。
#### 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,