Поддерживаю автора. Сам прошёл этот курс для начинающих, а также курс для продвинутых, прохожу их платный курс для проффесионалов ! Совет тебе, не обращай внимания на решение людей в одну строку, далее по курсу тебя этому научат и ты сам будешь решать 70% задач в одну строчку. Главное, чтобы код был читаемый и оптимальный!
там по ссылке не блогеры а просто чат с такими же учениками но я посмотрел что там и могу сказать что там все почти не по теме а так хочу выразить тебе респект весь день сегодня сидел сидел га задании которое ты решил с флагами
Первую можно было очень сильно оптимизировать. Во первых проверять число 1 и n смысла нет никакого, так что их можно сразу вписать в переменную. То есть cnt = n+1 вместо cnt = 0. Но для того чтобы в цикле ничего не сдваивалось, нужно сделать for i in range(2,n) Ну и для более прошаренных в теории чисел. Можно заметить, что делители числа идут парами. То есть если мы нашли некоторый делитель k, то n/k - это тоже его делитель. Эта граница пар делителей лежит на квадратном корне числа. Ну и так как квадратный корень не всегда целый, нужно импортировать floor. Тогда если квадратный корень нецелый, то как раз проверка будет вплоть до него. А если целый то нужно сумма сдвоится и ее надо бы вычесть Итоговая программа со всеми костылями выглядить так: from math import floor from math import sqrt n = int(input()) summ = 1 summ = n + 1 max = floor(sqrt(n)) if max**2 == n: summ += int(max) max -= 1 for i in range(2, max+1): if n%i == 0: summ += int(i + n/i) if n == 1: summ = 1 print(summ)
@@TurboGamasek228 floor импортировать почти необходимо, иначе что делать, когда у тебя корень получится целый и он сложится дважды. Да, ты мог вместо sqrt просто написать **0.5 , но мне удобнее через функцию
в 3 чат тебе какой-то бред по-моему написал. n = int(input()) max1 = 0 max2 = 0 for i in range(n): k = int(input()) if k >= max1: max2 = max1 max1 = k if k > max2 and k < max1: max2 = k print(max1) print(max2) ну очень просто думать даже нечего