Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Задача по Питону! Срочно!!! 8 класс

Для данного натурального числа n вычислите сумму всех его натуральных делителей, включая 1 и само число. Решение оформите в виде РЕКУРСИВНОЙ функции с одним параметром. Основная программа должна содержать ввод исходных данных, вызов функции и вывод ответ
Запрещено использовать циклы в программе

Примеры

Входные данные
1
6
Выходные данные
12

По дате
По рейтингу
Аватар пользователя
Новичок
3мес
1234567
 def sd(n, i=1):
  if i * i == n: return i
  if i * i > n: return 0
  if n % i == 0: return i + n // i + sd(n, i + 1)
  return sd(n, i + 1)

print(sd(int(input()))) 

Достаточно проверять множители не до n, а до √n.

Аватар пользователя
Профи
3мес

def sum_of_divisors(n, divisor=1):
# Базовый случай: если делитель больше n, возвращаем 0
if divisor > n:
return 0
# Если n делится на divisor, добавляем его к сумме
if n % divisor == 0:
return divisor + sum_of_divisors(n, divisor + 1)
else:
return sum_of_divisors(n, divisor + 1)

# Основная программа
if __name__ == "__main__":
n = int(input("Введите натуральное число n: "))
result = sum_of_divisors(n)
print("Сумма всех натуральных делителей числа", n, "равна", result)