嗨,我在做一个函数,检查一个数字是否是质数,但它告诉我9是质数。
def eprimo(num):
if num < 2:
return False
if num == 2:
return True
else:
for div in range(2,num):
if num % div == 0:
return False
else:
return True发布于 2013-10-15 23:31:12
无论是否完成检查,您都将从该for循环的第一次迭代中返回。除非数字绝对不是质数,否则不应该从循环内部返回。删除else,并且仅在循环结束时返回True。
def eprimo(num):
if num < 2:
return False
if num == 2:
return True
else:
for div in range(2,num):
if num % div == 0:
return False
return True优化旁注:你真的不需要检查所有的候选除数,直到num。你只需要检查num的平方根。
发布于 2013-10-15 23:31:19
当for循环检查您的数字是否能被2整除时,它会在第一次迭代后立即退出。如果您的数字是偶数,它将返回False;否则,它将返回True。
解决方案不是立即返回True;而是等待循环中所有迭代的结束:
for div in range(2, num):
if num % div == 0:
return False
return True或者,使用all()结构:
return all(num % div != 0 for div in range(2, num))发布于 2013-10-15 23:49:14
您可以提取偶数的测试,然后只对奇数进行循环,而不是测试范围(2,num)中的所有除数。此外,正如蜥蜴比尔所建议的那样,你可以在num的平方根上停止。这将是两倍的速度:
def eprimo(num):
if num < 2:
return False
if num % 2 == 0:
return num == 2
div = 3
while div * div <= num:
if num % div == 0:
return False
div += 2
return Truehttps://stackoverflow.com/questions/19385136
复制相似问题