N = 50 # для наглядности возьмём небольшое N
sum_of_dividers = [1] * N # все числа делятся на 1, проходили уже
for i in range(2, N // 2 + 1): # начнем делители с двойки
for j in range(i * 2, N, i): # ко всем ячейкам с адресом,
# кратным i но большим, чем i,
sum_of_dividers[j] += i # прибавим делитель i
for i in range(2, N):
print(i, sum_of_dividers[i], '' if sum_of_dividers[i] <= i else 'избыточное')
def izb(n:int): #функция для определения является число избыточным или нет
delt = [] # массив куда будут помещаться все делители числа n
for i in range(1,n):
if n % i == 0:
delt.append(i) #добавления делителя в массив
else:
if sum(delt) > n: #если сумма делителей больше самого числа то это избыточное числа то есть выводим True
return True
else:
return False
sum(delt) > n
возвращает логическое значение и может быть передано напрямую в оператор return. Перепишите.
Ладно, самое главное - ты нащупал, где у тебя главная жопа. Но посмотри: в самом внутреннем цикле у тебя происходит вычисление одного и того же, (g+h). Нельзя ли как-то съэкономить?