Нужно сделать полную итерацию для проверки условного оператора перед тем как начать там проверять. Можно ли это продолжить через вложенные циклы?
Совершенным называется число, равное сумме всех своих делителей, меньших его самого (например, число 6=1+2+3). Напишите программу, которая вводит натуральное число N и находит все совершенные числа в диапазоне от 1 до N .
n=int(input())
m=0
mas=[]
for i in range(2,n+1):
----for j in range(1,i+1):
------if i%j==0:
--------m+=j
--------if m==i:
------------mas.append(i)
----m=0
print(*mas)
>>>*mas
6 24 28
Выводить должно 6, 28. Но как только неполная сумма всех делителей равняется значению i он записывается в список и продолжает считать сумму дальше. Есть ли какой нибудь метод, способ сделать что бы посчитал полную сумму а потом только перешел к проверке прямо во вложенных циклах?
Фрагменты кода надо размещать в виде текста и оборачивать тэгом code для корректного отображения. Удобно делать кнопкой </> Это обязательно, см.п.3.8 Регламента.
Сюда же относится traceback, ввод и вывод в консоли и другая структурированная текстовая инфа.
Также обратите внимание на п.3.6
Когда вы регистрировались, вы обещали выполнять Регламент.
Ваши вопросы раз за разом демонстрируют, что вы не читали правила.
Если вы будете продолжать нарушать Регламент, ваши вопросы могут быть удалены, а аккаунт заблокирован модераторами временно или навсегда.
Будьте благоразумны.
ну для начала, почему у тебя вложенный цикл j идёт до i+1, т.е. включает само число?
во-вторых, почему ты не очищаешь mas для каждого нового i?
в-третьих, почему ты делаешь проверку суммы массива множителей внутри цикла по j? Это как раз и даёт то поведение, которое ты наблюдаешь. Сумма проверяется после каждого множителя, а не для всех. Вот просто вслух проговорить, что делает программа - и уже бы заметил. Вынеси проверку из вложенного цикла.
i+1 убирал , т.к делители нужны без числа которое делиться само на себя. mas не чищу потому что нужно вывести все совершенные числа в диапазоне до n числа. Есди я вынесу проверку из вложенного цикла то цикл сам по себе сделается и с ничем сранивать не будет . Я знаю такое поведение ... но мне было интересно если какой нибудь способ обойти это поведение . Ведь это упростило бы многое..
Вы проверяете сумму внутри второго цикла. Поэтому все делители не учитываются. Для числа 24 цикл прекращается на 1, 2, 3, 4, 6, 8, и до 12 не доходит. Поэтому 24 и попадает в результирующий список.