【发布时间】:2021-12-30 19:12:11
【问题描述】:
此代码用于输出给定范围内的素数:
def sqrt(n):
return n**0.5
# find primes
def primes(minNum, maxNum):
primes_sum = 0
for i in range(minNum, maxNum):
current_max = int(sqrt(i))
for n in range(2, current_max + 1):
if(i%n == 0):
break
else:
primes_sum += i
print(i)
break
print('\nSum of all primes: ', primes_sum)
primes(10, 20)
但是,我得到一个不正确的输出:
11, 13, 15, 17, 19
有人知道 15 是如何出现的吗?我将打印语句放在第一个 if 语句块中,以验证 if(i%n == 0) 条件检测到 15,确实如此,但不知何故,它仍然出现在我的最终输出中,我不知道为什么。
【问题讨论】:
-
15 出现在素数中,因为您的代码将检查
15是否可以被2到sqrt(15)+1之间的数字整除,即2到3。但是当它检查15是否可以被 2 整除时,如果语句失败,然后它会转到 else 语句并将15打印为素数 -
@SAISANTOSHCHIRAG 哦,我现在明白了。我的逻辑缺陷是没有意识到,一旦第一个 if 语句不满足,它就会转移到 else 语句,我不知道在这种情况下我是如何轻易地忽略了这一点。谢谢。
-
如果我的回答解决了你的问题,你能接受吗?我已经添加了代码。如果您接受将不胜感激