misakufoxx
@misakufoxx
中文是什么

Нужно сделать полную итерацию для проверки условного оператора перед тем как начать там проверять. Можно ли это продолжить через вложенные циклы?

Совершенным называется число, равное сумме всех своих делителей, меньших его самого (например, число 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 он записывается в список и продолжает считать сумму дальше. Есть ли какой нибудь метод, способ сделать что бы посчитал полную сумму а потом только перешел к проверке прямо во вложенных циклах?
  • Вопрос задан
  • 168 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
ну для начала, почему у тебя вложенный цикл j идёт до i+1, т.е. включает само число?
во-вторых, почему ты не очищаешь mas для каждого нового i?

в-третьих, почему ты делаешь проверку суммы массива множителей внутри цикла по j? Это как раз и даёт то поведение, которое ты наблюдаешь. Сумма проверяется после каждого множителя, а не для всех. Вот просто вслух проговорить, что делает программа - и уже бы заметил. Вынеси проверку из вложенного цикла.
Ответ написан
@Shpindel_t_800
Вы проверяете сумму внутри второго цикла. Поэтому все делители не учитываются. Для числа 24 цикл прекращается на 1, 2, 3, 4, 6, 8, и до 12 не доходит. Поэтому 24 и попадает в результирующий список.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы