试图找到输出匹配条件。遍历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之后的下一个质数形式的连续迭代输出。
答案 0 :(得分:1)
在不停止的同时,对其进行处理。在处理过程中会消耗大量时间。
def is_prime(num):
if num > 1:
for i in range(2,num):
if (num % i) == 0:
return(False)
break
else:
return(True)
以上功能导致240^240
如下所示。
42200323427409150751742179532592018252808661114071266629718376939092568551075505740268077803623642715001998769421215763628719631633378375087756319383725641630331895773386010866243028159828607385899087848942302738709343403640250275314218243930567432731458807734886574283968918955323573297631562415292893276034393336066052132808455118105272470307339550216091253570417050545677371810192238471803263478546492058686483752405946094606978411379079233793804753705243644236607675749522119768311584522527886912942059070222789851175661909205254663263392466134105108288691503106
在您的代码is_prime(calc(num))
中,检查从2到以上数字的每个整数。因此很耗时间。
建议使用vscode或其他调试工具。
如果将打印用于调试目的,请替换print(check(239))
,然后将打印放入第4行以查看调试结果。
def is_prime(num):
if num > 1:
for i in range(2,num):
print(i)
if (num % i) == 0:
return(False)
break
else:
return(True)
答案 1 :(得分:0)
问题似乎是239是第一个素数,因此很难确定239 ** 239 + 2
是否是素数。在此之前,计算出的数字很容易就无法通过主要测试(5的倍数,等等)。下面是我对代码的清理,以使事情(至少对我来说)更清楚。它包括注释中建议的一些优化,但差异不大。它仍然停留在239:
def is_prime(number):
if number < 2:
return False
if number % 2 == 0:
return number == 2
i = 3
while i * i <= number:
if number % i == 0:
return False
i += 2
return True
def calculate(odd_prime):
return odd_prime ** odd_prime + 2
def get_next_odd_prime(odd_number):
while True:
odd_number += 2
if is_prime(odd_number):
return odd_number
def check(odd_prime):
while True:
if is_prime(calculate(odd_prime)):
return odd_prime
odd_prime = get_next_odd_prime(odd_prime)
print(odd_prime)
print(check(5))
由于3通过了此测试(3 ** 3 + 2 == 29
也是素数),所以我们从下一个较高的奇数素数开始,因为大于2的偶数没有意义。
人们可能会建议使用Eratosthenes筛子作为更好的初筛-保持警惕。由于内存分配问题,任何依赖于数组结构的 simple 筛子实现都会在创建11 ** 11 + 2
左右的Python列表时遇到问题。我不知道只能表示奇数的位向量能走多大。