Рассмотрим следующую проблему:
Пусть - конечное подмножество натуральных чисел.
Пусть | где - наибольший общий делитель и yg c d ( s i , s j ) s i , s j ∈ S , s i ≠ s j } g c d ( x , y ) x y
Найти максимальный элемент .
Эту проблему можно решить, взяв наибольший общий делитель каждой пары с использованием алгоритма Евклида и отслеживая самый большой из них.
Есть ли более эффективный способ решения этой проблемы?
algorithms
number-theory
Томми
источник
источник
Ответы:
Вот эффективный алгоритм (на Python ). Пожалуйста, найдите объяснение ниже.
Объяснение приведенного выше фрагмента кода:
Мы наблюдаем следующее в этой проблеме:
max(S)
S
max
все такие числа со свойством, упомянутым выше.С этими наблюдениями программа делает следующее:
set
список. Как наборы можно эффективно искать вO(log(n))
m
.m
до1
, найдите первое число, которое имеет два или более кратных в наборе. Первый найденный номер - это результат.Надеюсь, это понятно. Пожалуйста, дайте мне знать, если вам нужно более подробное объяснение.
источник
i
начиная сm
до1
нас проверить , если два или более кратные изi
в наборе. В этом примере два кратных 2 находятся в наборе '2 и 4'. так что ответ 2. Внутреннийwhile
цикл проверяет все множества,i
покаm' as
m` не является маской списка.