在Python2.7中,我想通过在结果(s)上重复素因子(sopfr)函数的总和来生成给定整数的有限序列,直到它达到素数。 sopfr(n)的以下代码来自OEIS A001414。
from sympy import factorint
def sopfr(n):
return sum(p*e for p, e in factorint(n).items())
>>>sopfr(888)
46
>>>
我想改变这段代码,以便它能给出这个结果
>>>sopfrs(888)
46 25 10 7
>>>
其中46 = sopfr(888),25 = sopfr(46)......依此类推,直到终止于素数,在这种情况下为7.我已经阅读了一些并试验了while
和for
循环没有运气。实验,我肯定会笑一笑。原谅这个问题的新手性质,任何帮助将不胜感激。
答案 0 :(得分: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]