Python 2.7 Python素数因子和函数生成有限序列

Python 2.7 Python素数因子和函数生成有限序列,python-2.7,math,recursion,primes,sequences,Python 2.7,Math,Recursion,Primes,Sequences,在Python2.7中,我想通过对结果重复素数因子和(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 >>> 我想修改这个代码,这样它会给出这个结果 >>&

在Python2.7中,我想通过对结果重复素数因子和(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
的文章,并尝试了
循环中的运气。我相信这会让人开怀大笑。请原谅这个问题的新手性质,任何帮助都将不胜感激

您可以使用如下示例:

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]

您可以使用如下示例:

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]

感觉sopfrs可以是这样的:如果n是prime(sopfr(n)),则执行一块打印sopfr(n)并调用sopfrs(sopfr(n))感觉sopfrs可以是这样的:如果n是prime(sopfr(n)),则执行一块打印sopfr(n)并调用sopfrs(sopfr(n))