【发布时间】:2019-05-16 19:31:31
【问题描述】:
试图找到输出匹配条件。遍历while循环,增加变量,但是当num = 239时程序似乎停止并且不知道为什么。当我手动尝试每个功能时,程序运行良好。
def is_prime(num):
if num > 1:
for i in range(2,num):
if (num % i) == 0:
return(False)
break
else:
return(True)
def calc(num):
x = (num ** num) + 2
return(x)
def get_next_prime(num):
num += 1
while True:
if is_prime(num):
return(num)
break
else:
num += 1
def check(num):
while True:
if is_prime(calc(num)) and is_prime(num):
return(num)
break
else:
num = get_next_prime(num)
print(num)
print(check(4))
预期的结果是以239之后的下一个素数的形式继续迭代输出。
【问题讨论】:
-
旁白:请检查如何有效地计算一个数是否为素数。
-
我有并且这个功能有效。我用 237、238、239、240 对其进行了测试,所有输出都是正确的。
-
在 is_prime 中,您可以使用
for i in range(2,num):代替for i in range(2, int(math.sqrt(num)) + 1):,这将为您节省大量无用的计算。 return 之后的 break 也是没用的。还有return(False)->return False。 -
高效:我的意思是,您可以通过测试直到数字平方根的除数而不是数字本身来测试数字是否为素数。
-
阅读ericlippert.com/2014/03/05/how-to-debug-small-programs 了解调试代码的技巧。这将帮助您了解它意外退出的原因。