簡體   English   中英

如何打印所有結果?

[英]How can I print out all the results?

這里的問題是獲得相當大的數字 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))

我看到了一個可能的解決方案。 首先,您必須計算該數字的所有質因數。

為此,您需要創建一個按順序生成素數的函數。

該函數應該將素數存儲在一個列表中,並測試下一個未測試的數字是否可以被列表中的任何素數整除。 如果這個數不能被列表中的任何素數整除,那么這個數就是素數。

例如,當您有質數列表 [2,3,5,7] 測試 8 被 2,3,5 和 7 整除時。它可以被 2 整除,所以它不是質數,然后用 9 等。 . 當達到 11 時它是質數所以把它放在列表中並產生 11。

一旦計算出您給出的數字的所有因數素數,您必須將每個因數分配到列表中的 4 個位置之一。 然后通過將相應位置的數字乘以因子來“放置”所有因子。 你從 [1,1,1,1] 開始。

要獲得所有 4 對因子,您需要對因子進行所有可能的分配。 即 [0,1,2,3] 與自身 N 次的集合乘積,其中 N 是因子的數量。

(N 個因子有多少對?)

例如,如果有 5 個因子,那么集合乘積的一個元素是 [1, 0, 2, 3, 3] 它將第一個因子分配給 1,第二個因子分配給 0,第三個因子分配給 2,第四個分配給第五個放置因素 3.

對於集合產品,我們使用 itertools.product:

import itertools
assignments = itertools.product([0,1,2,3], repeat = len(factors))


for a in assignments:
    pair = [1,1,1,1]
    for i, place in enumerate(a):
        pair[place] *= factor[i]
    pairs.append(pair)

我可以用下面的代碼得到想要的結果,但如果目標太大,問題就會太慢。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM