我厌倦了用python在特定的数字中找到最小的右凸素数。当我试图在5位数字中找到最小的右凸素数时,代码运行得很好。然而,当我试图在6位数字中找到它时,python意外地退出了。你知道吗
这是我的密码:
def findRTP(digits, currNum = 2):
if digits == len(str(currNum)):return currNum
else:
# if digit % 2 == 0 or digit == 5:
# return findRTP(digits, currNum, digit+1)
# elif (digitSum(currNum)+digit)%3 == 0:
# return findRTP(digits, currNum, digit+1)
for digit in range(1, 10):
currNum = currNum * 10 + digit
if isPrime(currNum):
result = findRTP(digits, currNum)
if result != None: return result
else: currNum //=10
else:
if digit >= 9:
currNum //= 10
return findRTP(digits, currNum//10)
currNum //= 10
return None
# def digitSum(num):
# if num == 0:
# return 0
# else:
# return num % 10 + digitSum(num // 10)
def isPrime(n):
if (n < 2):
return False
if (n == 2):
return True
if (n % 2 == 0):
return False
maxFactor = round(n**0.5)
for factor in range(3,maxFactor+1,2):
if (n % factor == 0):
return False
return True
def callWithLargeStack(f,*args):
import sys
import threading
threading.stack_size(2**27) # 64MB stack
sys.setrecursionlimit(2**27) # will hit 64MB stack limit first
# need new thread to get the redefined stack size
def wrappedFn(resultWrapper): resultWrapper[0] = f(*args)
resultWrapper = [None]
#thread = threading.Thread(target=f, args=args)
thread = threading.Thread(target=wrappedFn, args=[resultWrapper])
thread.start()
thread.join()
return resultWrapper[0]
print(callWithLargeStack(findRTP, 6))
请帮帮我。你知道吗
当这个程序运行时,它以退出状态138终止,这意味着它被SIGBUS信号终止(信号#10为128+10)。你知道吗
在本例中,这是因为它超出了线程的堆栈大小。你也可以用5位数的版本来复制:将堆栈大小改为2**16。你知道吗
在我的系统中,这样修改程序会产生
Process finished with exit code 138
,就像6位版本一样。你知道吗这里简单的回答是递归可能不是实现您所要做的事情的最佳方法。用非递归版本替换
isPrime
很简单,通过一些工作,您也可以对findRTP
执行同样的操作。你知道吗相关问题 更多 >
编程相关推荐