【发布时间】:2021-12-13 00:23:39
【问题描述】:
这里的问题是获得相当大的数字 17309205 的所有 4 对因子。 结果应该是
{1,1,1,17309205}
{1,1,3,5769735} etc..
我尝试了 4 个嵌套的 for 循环,但耗时太长,所以我尝试了不同的想法。
我的想法是找到所有可能的因子对,然后将其过滤掉那些包含 4 对的因子。但现在我只得到一个结果。 而且结果也没有按照应有的方式打印。
def s(target, numbers,memo={}):
if target == 0:
return 0
if target == 1:
return 1
if target < 0:
pass
if target in memo:
return memo[target]
result = []
for n in numbers:
if target%n !=0:
pass
else:
dominator = target/n
result = s(dominator, numbers, memo)
memo[target] = [result,[n,dominator]]
return memo[target]
v = list(range(2,17309205))
print(s(17309205,v))
【问题讨论】:
-
欢迎来到 SO!恐怕我不了解该功能的规范。你能澄清一下吗?也许在较小的输入上显示逻辑会使它更清晰。谢谢。
-
例如。 4 的 4 对因子是 {1, 1, 1,4} 和 {1, 1, 2, 2}。
-
{2,2,2,2,2} 是 32 的因数之一,但它不应包含在结果中,因为它包含 5 个元素。
标签: python python-3.x recursion memoization