Как получить все четные суммы делителей в промежутке?
a = int (input())
b = int (input())
def sumchis(i):
sum = 0
d = [x for x in range(1, i // 2 + 1) if i % x == 0 ]
d.append(i)
for j in d:
sum += j
return(sum)
def sop(a, b, sumchis):
chet = []
vsedel = []
alch3 = []
for i in range(a, b + 1):
alch3.append(i)
ch = sumchis(i)
vsedel.append(str(ch))
if ch % 2 == 0:
chet.append(str(ch))
return (chet, vsedel, alch3)
print(sop(a, b, sumchis))
Cейчас код выводит 3 списка chet - только четные суммы всех делителей (т.е. 3 = 1+3, выведет 4, а 4 = 1+2+4 = 7, выводить не станет
vsedel - сумму всех делителей, каждого числа
alch3 - все числа
Не понимаю как сделать это:
Надо вывести все числа (в промежутке) , сумма делителей которых четные.
Я думаю надо получить индексы в списке vsedel всех элементов, которые совпадают со списком chet, а затем по этим индексам надо получить элементы списка alch3 и уже их вывести.
Сформулировать получается, а вот в коде уже путаюсь
Ответы (1 шт):
А в чем проблема то?
найти все чётные делители числа в промежутке между a и b
пройти рекурсивно по списку делителей
в качестве оптимизации найденные суммы можно добавлять в множество, чтобы не дублировать выводы
получается такой код:
def sums(dividers, pos = 0, res = 0, total = set()):
# перебираем все делители из оставшихся
for index in range(pos, len(dividers)):
# вычисляем новую сумму
new_sum = res + dividers[index]
# если новой суммы еще не было получено ранее -
# выводим результат и добавляем сумму в множество найденных ранее сумм
if new_sum not in total:
print(new_sum )
total.add(new_sum )
# рекурсивно вычисляем сумму делителей
sums(dividers, pos + 1, new_sum , total)
n = 12
a = 2
b = 5
# определяем необходимые делители (в диапазоне [a, b] и четные)
dividers = [x for x in range(a, b + 1) if n % x == 0 and x % 2 == 0]
# ищем все суммы выбранных делителей
sums(dividers)