【问题标题】:Python find sum of prime factors without loopPython找到没有循环的素数之和
【发布时间】:2016-10-02 04:41:14
【问题描述】:

我试图在不使用循环的情况下产生一个数字的所有素因子的总和。但是如果 prime_factor(m, k) 的结果大于 2,当在 factor=prime_factor(m, k) 之后转到 main(n) 时,因子将为 None

def prime_factor(m, k):
    if m%k==0:
        return k 
    else:
        prime_factor(m, k+1)

def main(n):
    if n<2:
        return 0
    if n==2:
        return n
    else:
        factor=prime_factor(n, 2)
        return factor+main(n//factor)

【问题讨论】:

  • 只返回递归调用...

标签: python recursion sieve-of-eratosthenes prime-factoring


【解决方案1】:

您的prime_factor 函数没有对递归调用的结果做任何事情。您需要退货:

def prime_factor(m, k):
    if m%k==0:
        return k 
    else:
        return prime_factor(m, k+1)         # need the return here

也是次要优化,但您可以调整您的值,以便从 3 开始并在递归调用中执行 prime_factor(m, k+2) 而不是 k+1。

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2013-01-17
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多