Текст Задачи
Самое маленькое число, которое делится без остатка на все числа от 1 до 10, — это 2520. Какое самое маленькое число делится нацело на все числа от 1 до 20?
Решение и Обсуждение
1. Простой Перебор
Этот метод заключается в последовательном увеличении чисел и проверке каждого на делимость всеми числами от 1 до 20.
def find_smallest_multiple():
number = 20
while True:
if all(number % i == 0 for i in range(1, 21)):
return number
number += 20
result = find_smallest_multiple()
Анализ скорости выполнения: Этот метод требует большого количества итераций, особенно если число велико, что делает его медленным. Скорость выполнения зависит от размера искомого числа и может расти экспоненциально.
2. Наименьшее Общее Кратное (НОК)
Математический подход, использующий НОК для нахождения минимального числа, кратного всем числам от 1 до 20.
import math
def lcm(a, b):
return abs(a*b) // math.gcd(a, b)
def smallest_multiple_lcm():
lcm_result = 1
for i in range(1, 21):
lcm_result = lcm(lcm_result, i)
return lcm_result
result_lcm = smallest_multiple_lcm()
Анализ скорости выполнения: Этот метод гораздо быстрее, так как он использует арифметические свойства НОК и НОД (наибольшего общего делителя). Время выполнения остаётся относительно низким даже для больших чисел.
Вывод
Два предложенных метода демонстрируют разные подходы к решению задачи. В то время как простой перебор является более прямолинейным, но медленным методом, использование НОК значительно ускоряет процесс. Важно выбирать подход в зависимости от конкретной ситуации и требуемой скорости выполнения.