Что делает скрипт в Python?

Я выполнял задание из Проекта Эйлера, в котором нужно найти наименьшее число, которое делится без остатка на числа от 1 до 20 включительно. Я понял, что можно использовать цикл с range, но так и не придумал как, решил иначе.
Позже в комментариях нашел такой скрипт, но не разобрался, как он работает. Объясните, пожалуйста.

Как увеличивается i, если второе условие(во внутреннем цикле) не срабатывает? Сначала выполняется внешний цикл или внутренний?
i = 1
for k in (range(1, 21)):
    if i % k > 0:
        for j in range(1, 21):
            if (i*j) % k == 0:
                i *= j
                break
print (i)
  • Вопрос задан
  • 1031 просмотр
Решения вопроса 1
obezh
@obezh
Python разработчик
Сначала срабатывает первый цикл до выполнения условия, когда оно выполняется - срабатывает второй цикл до выполнения условия, как только оно выполняется - изменяется i и переходит к первому циклу. i не меняется, пока скрипт не перейдёт ко второму циклу, ко второму циклу он переходит только при выполнении условия в первом.
Для таких вещей полезно иногда использовать print на каждой итерации каждого цикла, чтоб смотреть где что происходит, если трудно понять это сходу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
longclaps
@longclaps
Я понял, что можно использовать цикл с range, но так и не придумал как, решил иначе.

Число, которое без остатка делится на некие другие числа, называется Наименьшим Общим Кратным (НОК). Этому в школе учат, но не всех. Для вычисления НОК есть формула, выражающая его через НОД (Наибольший Общий Делитель) - этому в школе учат, но не всех.
Как же так вышло-то в школе?
from math import gcd

a = 2
for b in range(3, 21):
    a = a * b // gcd(a, b)
print(a)
Ответ написан
solotony
@solotony
code for food, caviar preferably
2
6
12
60
420
840
2520
27720
360360
720720
12252240
232792560
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
21 февр. 2020, в 16:22
650000 руб./за проект
21 февр. 2020, в 16:07
80000 руб./за проект
21 февр. 2020, в 15:34
75000 руб./за проект