首页 > 解决方案 > 如何打印所有结果?

问题描述

这里的问题是获得相当大的数字 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))

标签: pythonpython-3.xrecursionmemoization

解决方案


我可以用下面的代码得到想要的结果,但是如果目标太大,问题就会太慢。

target = 16
for a in range(1,target+1):
    for b in range(1,target+1):
        for c in range(1, target+1):
            for d in range(1, target+1):
                if a<=b<=c<=d and a*b*c*d == target:
                    print (a,b,c,d)

推荐阅读