Разбор кода цикла

Дано задание: Даны два натуральных числа a и b (известно, что b больше, чем a). Вывести наибольшее количество последовательных чисел, входящих в промежуток [a, b], произведение которых не превышает произведения чисел a и b.

a = int(input())
b = int(input())
max_len = 0
for i in range(a, b + 1):
    product = i
    count = 1
    while product * (i + count) <= a * b:
        product *= (i + count)
        count += 1
    if count > max_len:
        max_len = count
print(max_len)

Как здесь работает переменная product? Ее значение аналогично i и начинается со значения а? Или здесь другая логика? Также не могу разобраться, почему прибавляем к i count в условии цикла?


Ответы (1 шт):

Автор решения: MBo

product - это произведение чисел поддиапазона, начинающиегося с числа i

Внутренний цикл последовательно перемножает числа этого поддиапазона, пока произведение не станет выше предела a*b

Вы возьмите небольшой диапазон, например, 2..40, и проследите, как на первом обороте внешнего цикла product меняется 2, 6, 24 (дальше внутренний цикл не пойдёт) на втором - 3, 12, на третьем 4, 20. Не пренебрегайте отладчиком, если есть сомнения в функционировании алгоритма.

i + count это просто число с номером count (считая с нуля) после начала подиапазона.

Впрочем, из математических свойств задачи её можно решить попроще, ну вам, наверное, по заданию нужно вложенные циклы освоить.

→ Ссылка