Как оптимизировать алгоритм для выполнения 5 задачи с проекта Эйлера? Добрый день!
Написал алгоритм для реализации вот этой задачи.def euler5(limit):
hasNumberFound = False
iterator = 1
while not hasNumberFound:
num = limit * iterator
for divider in range(2, limit):
if num % divider != 0:
break
else:
hasNumberFound = True
return num
iterator += 1
print( euler5(20) )
Смущает то, что на выполнение задачи при значении аргумента функции равной 20, уходит 13.5 секунд. На выходе выдаёт: 232792560.
Возможно ли оптимизировать алгоритм?

21 Авг 2019 в 06:07
138 +1
0
Ответы
1

Да, можно оптимизировать данный алгоритм. Вместо того, чтобы проверять все числа от 1 до limit * iterator, можно воспользоваться математическими свойствами и найти наименьшее общее кратное (НОК) всех чисел от 1 до limit.

Вот оптимизированный алгоритм:

def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
def lcm(a, b):
return a * b // gcd(a, b)
def euler5(limit):
result = 1
for i in range(1, limit + 1):
result = lcm(result, i)
return result
print(euler5(20))

Этот алгоритм работает значительно быстрее и может решить задачу для аргумента 20 мгновенно. Результат остается тем же: 232792560.

20 Апр в 13:23
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир