Рассмотрим следующую проблему:
Пусть - конечное подмножество натуральных чисел.
Пусть | где - наибольший общий делитель и yg c d ( s i , s j ) s i , s j ∈ S , s i ≠ s j } g c d ( x , y ) x y
Найти максимальный элемент .
Эту проблему можно решить, взяв наибольший общий делитель каждой пары с использованием алгоритма Евклида и отслеживая самый большой из них.
Есть ли более эффективный способ решения этой проблемы?
3
Возможно, вы захотите взглянуть на раздел 3.3 « Разработка ваших запросов и ответов : обнаружение распространенных слабых ключей в сетевых устройствах» (Heninger et al, Usenix Security 2012). Они описывают алгоритм для вычисления попарных gcd в gcd, в определенной настройке, используя деревья продуктов и деревья остатков. Я не знаю, распространяется ли это на вашу проблему, хотя.
—
DW
Вы пробовали что-нибудь с простыми факторизациями?
—
Райан
Предположим, что все числа являются относительно простыми, но для (например, каждый равен для больших различных простых чисел ). Тогда, кажется, трудно избежать проверки всех парных GCD. (Скажем, я говорю вам, что после проверки всех пар, но все парные GCD равны Как вы можете угадать без его вычисления?)
—
усуль
Ссылка @usul DW именно на эту проблему. Огромное количество, скажем, один миллиард, ключей шифрования должны быть продуктами двух разных простых чисел. Но мы подозреваем, что некоторые ключи шифрования имеют главный общий фактор (который будет gcd обоих ключей, что упрощает их анализ). Этот алгоритм позволяет найти ключи с общим множителем без вычисления n (n-1) / 2 gcd для n = 1 миллиарда.
—
gnasher729