2017-06-13 32 views
1

在Python2.7中,我想通過重複素數因子(sopfr)函數的總和來對給定整數生成有限序列,直到它達到素數。以下sopfr(n)的代碼來自OEIS A001414。Python總和素因子函數產生有限序列

from sympy import factorint 
def sopfr(n): 
    return sum(p*e for p, e in factorint(n).items()) 

>>>sopfr(888) 
46 
>>> 

我想改變這個代碼,以便它會在哪裏46 = sopfr(888),25 = sopfr(46)......等等給這個結果

>>>sopfrs(888) 
46 25 10 7 
>>> 

,直到這終止於一個素數,在這種情況下7.我讀過一些並試驗whilefor循環沒有運氣。實驗,我敢肯定,這將是一個很好的笑。原諒這個問題的新手性質,任何幫助將不勝感激。

+0

感覺sopfrs可能是這樣的:如果n是素數(sopfr(N))做別的印刷塊sopfr(n)並調用sopfrs(sopfr(n)) –

回答

0

您可以使用這樣的例子:

from sympy import factorint 

def sopfr(n): 
    sub = [] 
    while True: 
     a = sum(k*v for k,v in factorint(n).items()) 
     if a == n: 
      break 
     else: 
      sub.append(a) 
      n = a 
    return sub 
# Tests 
a = sopfr(888) 
print(a) 
a = sopfr(65) 
print(a) 

輸出:

[46, 25, 10, 7] 
[18, 8, 6, 5]