2017-06-13 12 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

感じるが、次のようになります。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) 

出力:sopfrsよう

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