вот код
counter = 0
a = 101
b = 110
largest = 0
for i in range(a, b + 1):
total = 0
for j in range(1, i + 1):
if i % j == 0:
total += j
if total >= counter and i >= largest:
counter = total
largest = i
print(largest, counter, end=' ')
Вопрос такой, почему если я убираю в иф 1 условие и счетчик который равняется тотал, а вместо этого вывожу просто тотал, то результаты другие выходят?
хотя счетчик равен 0, а в условии просто написали, что тотал больше счетчика
def d(a, b): max_div = 1 sum_div = 0 for i in range(min(a, b), 0, -1): if (a % i == 0) and (b % i == 0): sum_div += i if max_div == 1: max_div = i return sum_div, max_div print(d(101, 110)) print(d(110, 100)) Я бы так сделал...
могу в лс написать?
да и логически, как может быть делитель от 1 до 110 не больше 18
ну, во-первых, если сумму всех делителей, то counter += j без total , в любом случае counter будет равен последней итерации i
Смысла нет перебирать числа от 1 до n, чтобы узнать делители. Достаточно до корня из n идти
18 - это сумма общих делителей у чисел 100 и 110 (10+5+2+1 = 18)
Вот тут и вопрос у меня созревает, попробуйте скопировать мой код и глянуть на результат и попробуйте убрать тотал, а сразу с counterom работать, результата будет другой, я вот и понять не могу, как так выходит, если я ничего не добавляю, а результаты разные
я бы даже написал math.ceil(min(a, b)**0.5) но тут это не существенно.
Смотря какие входные данные будут
Если маленькие, то разницы почти не будет
можно и так, да. Будет правильнее;)
Обсуждают сегодня