【发布时间】:2020-06-04 12:11:57
【问题描述】:
您好,我是初学者,我被困在这个问题上,希望我只使用 while 循环来解决。这个问题要我写一个函数,当给定的数字是素数时返回 True,如果给定的数字不是素数,它返回 False。
到目前为止我的代码:
def is_prime(n):
i = 2
while i <= n//2:
if n%i != 0:
return True
else:
return False
i+=1
我遇到的问题是我认为我的代码显示了数字 4 及以上的正确输出,它返回 1、2 和 3 的“无”。我已经调试过它,我认为问题是 while 循环条件.但我不知道如何解决它。如果有任何专业人士可以帮助我,我将不胜感激!
编辑: 我更改了 while 条件,但 1 仍然返回 None .. 并且 2 在应该返回 True 时返回 False
def is_prime(n):
i = 2
while i <= n:
if n%i != 0:
return True
else:
return False
i+=1
【问题讨论】:
-
对于 while 循环,因为:
i <= n//2。3//2 = 1 -
如何在使其余代码正常工作的同时修复它?
-
只需在while循环之前为n == 1、2或3添加一些简单的条件,并相应地返回。
-
首先,您只需上到
sqrt(n)。其次,在 3 之后,您可以增加 2,因为偶数永远不是质数。对于 1,它被定义为素数,所以把那个测试放进去。对于 2 和 3,有while i < max(math.sqrt(n),2): -
您必须先让
while循环完成,然后才能返回True;一旦您测试了第一个除数,您就会返回。当i除以n时,可以立即返回False;否则,您必须继续使用i的下一个值。如果循环真正完成,那么你可以返回True。
标签: python