Python 生成有限序列的质因数函数之和
Python sum of prime factors function to produce finite sequence
In 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
和 for
循环失败。实验,我肯定会很有趣。请原谅这个问题的新手性质,我们将不胜感激。
您可以使用如下示例:
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]
In 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
和 for
循环失败。实验,我肯定会很有趣。请原谅这个问题的新手性质,我们将不胜感激。
您可以使用如下示例:
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]