【问题标题】:Python sum of prime factors function to produce finite sequencePython的素数之和函数产生有限序列
【发布时间】:2017-06-13 01:58:45
【问题描述】:

在 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 和 @ 987654324@ 循环没有运气。实验,我肯定会很好笑。原谅这个问题的新手性质,任何帮助将不胜感激。

【问题讨论】:

  • 感觉 sopfrs 可能看起来像:如果 n 是素数 (sopfr(n)) 否则执行打印 sopfr(n) 并调用 sopfrs(sopfr(n)) 的块

标签: python-2.7 math recursion primes sequences


【解决方案1】:

你可以使用类似下面的例子:

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]

【讨论】:

    猜你喜欢
    • 2013-09-27
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 2016-03-31
    • 1970-01-01
    相关资源
    最近更新 更多