這里的問題是獲得相當大的數字 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))
uj5u.com熱心網友回復:
我看到了一個可能的解決方案。首先,您必須計算該數字的所有質因數。
為此,您需要創建一個按順序生成素數的函式。
該函式應該將素數存盤在一個串列中,并測驗下一個未測驗的數字是否可以被串列中的任何素數整除。如果這個數不能被串列中的任何素數整除,那么這個數就是素數。
例如,當你有質數串列 [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)
uj5u.com熱心網友回復:
我可以用下面的代碼得到想要的結果,但如果目標太大,問題就會太慢。
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344907.html
上一篇:將迭代函式轉換為遞回函式
下一篇:斐波那契尾遞回背后的直覺
