【发布时间】:2021-10-14 00:30:30
【问题描述】:
有一个类似于 project euler 18 的任务,但这次你只能走过非素数。任务是:
您将在下面输入一个三角形,您需要根据下面给定的规则找到数字的最大总和;
1
8 4
2 6 9
8 5 9 3
1-您将从顶部开始向下移动到相邻的数字,如下所示。
2-你只能沿着对角线向下走。
3-你只能走过非质数。
根据上面的规则,下面输入的最大总和是多少?这意味着请将此金字塔作为您的实现的输入(作为文件或直接在代码中的常量)并使用它来解决。
215
193 124
117 237 442
218 935 347 235
320 804 522 417 345
229 601 723 835 133 124
248 202 277 433 207 263 257
359 464 504 528 516 716 871 182
461 441 426 656 863 560 380 171 923
381 348 573 533 447 632 387 176 975 449
223 711 445 645 245 543 931 532 937 541 444
330 131 333 928 377 733 017 778 839 168 197 197
131 171 522 137 217 224 291 413 528 520 227 229 928
223 626 034 683 839 053 627 310 713 999 629 817 410 121
924 622 911 233 325 139 721 218 253 223 107 233 230 124 233
首先,尝试在没有第三个条件的情况下解决它(只走过非素数):
num="""215
193 124
117 237 442
218 935 347 235
320 804 522 417 345
229 601 723 835 133 124
248 202 277 433 207 263 257
359 464 504 528 516 716 871 182
461 441 426 656 863 560 380 171 923
381 348 573 533 447 632 387 176 975 449
223 711 445 645 245 543 931 532 937 541 444
330 131 333 928 377 733 017 778 839 168 197 197
131 171 522 137 217 224 291 413 528 520 227 229 928
223 626 034 683 839 053 627 310 713 999 629 817 410 121
924 622 911 233 325 139 721 218 253 223 107 233 230 124 233"""
rows=num.split("\n")
array=list()
for row in rows:
num_list=row.split(" ")
array.append(num_list)
for i in range(0,len(array)):
for j in range(0,i+1):
array[i][j] = int(array[i][j])
for i in range(len(array)-1, -1, -1):
for j in range(0,i):
array[i-1][j] += max(array[i][j], array[i][j+1])
print(array[0])
此时,我不知道如何将质数检查放入这段代码并找到真正的解决方案,因为上面的代码输出是9022
---编辑---
我添加了质数检查以打印一个数字是否是/不是质数:
def isprime(n):
if n < 2: return False
for i in range(2, n):
if n % i == 0:
print("non prime")
break
else:
print("prime")
for i in range(0,len(array)):
for j in range(0,i+1):
print(isprime(array[i][j]))
我应该如何让它跳过素数并继续使用非素数?
【问题讨论】: