Python находит сумму простых множителей без цикла

#python #recursion #sieve-of-eratosthenes #prime-factoring

#python #рекурсия #решетка Эратосфена #простое разложение на множители

Вопрос:

Я пытаюсь получить сумму всех простых множителей числа без использования цикла. Однако, если результат prime_factor(m, k) больше 2, при переходе к main(n) после factor=prime_factor(m, k), factor будет равен 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)
  

Комментарии:

1. Просто верните рекурсивный вызов…

Ответ №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.