TL; DR
Порівняйте суму кожної трійки, добуток кожної трійки та суму продуктів усіх можливих комбінацій кожної трійки.
Ніттій Гриті
За фундаментальною теоремою Алгебри для многочлена ступеня N ми повинні мати N коренів.
Використовуючи цей факт, ми дозволяємо нашим нулями a1, a2, and a3
. Тепер ми знаходимо коефіцієнти цього многочлена.
(x - a1) * (x - a2) * (x - a3)
(x^2 - (a1 + a2) * x + a1a2) * (x - a3)
x^3 - (a1 + a2) * x^2 + (a1a2) * x - a3 * x^2 + (a1a3 + a2a3) * x - a1a2a3
x^3 + (-1 * (a1 + a2 + a3)) * x^2 + (a1a2 + a1a3 + a2a3) * x + (-1 * a1a2a3)
Якщо два поліноми рівнозначні, вони повинні мати однакові корені (знову ж таки, ЗВТ). Таким чином, все, що нам потрібно зробити, - порівняти коефіцієнти утворених многочленів.
Отже, якщо
(-1 * (a1 + a2 + a3) == (-1 * (b1 + b2 + b3))
---equivalently---
a1 + a2 + a3 == b1 + b2 + b3
І
(a1a2 + a1a3 + a2a3) == (b1b2 + b1b3 + b2b3)
І
-1 * a1a2a3 == -1 * b1b2b3
---equivalently---
a1a2a3 == b1b2b3
Тоді ми можемо укласти трійки a1, a2, a3
і b1, b2, b3
рівнозначні.
Чи варто того?
З практичної точки зору, давайте подивимось, чи справді це більш ефективно, ніж перевірка грубої сили, як показано в ОП.
Перша перевірка: підсумовуйте та порівняйте. Для цього потрібно 4 загальних доповнення та 1 перевірка на рівність.
Перевірка всього = 5; Всього працює = 5
Друга перевірка: продукт, сума та порівняння. Для цього потрібно 6 загальних множин, 4 сумарних додавання та 1 перевірка рівності.
Перевірка загальна = 11; Всього працює = 16
Третя перевірка: продукт та порівняння. Для цього потрібно 4 загальних множення та 1 перевірка рівності.
Перевірка всього = 5; Всього працює = 21
Додаючи дві логічні операції AND, загальна кількість двійкових операцій для "коефіцієнтів генерованого поліноміального підходу" вимагає лише:
23 двійкові операції
Для перевірки грубої сили потрібно 18 перевірок рівності, 12 логічних порівнянь І 5 логічних порівнянь ІЛО для загальної кількості:
35 двійкових операцій
Отже, строго кажучи , відповідь "так", "коефіцієнти генерованого поліноміального підходу" дійсно ефективніші. Однак, як зазначає @WJS, підхід грубої сили має набагато більше можливостей для короткого замикання і, таким чином, виконуватись на / ефективніше, ніж математичний підхід.
Для повної ретельності
Ми не можемо пропустити перевірку суми продуктів усіх можливих комбінацій кожної трійки. Якщо ми не залишимо цього, існує безліч прикладів, коли це не вдається. Розглянемо (23, 32, 45)
і (24, 30, 46)
* :
23 + 32 + 45 = 100
24 + 30 + 46 = 100
23 * 32 * 45 = 33120
24 * 30 * 46 = 33120
Вони не рівноцінні, але дають однакову суму і добуток. Однак вони не дають однакової суми продуктів усіх можливих комбінацій:
23 * 32 + 23 * 45 + 32 * 45 = 3211
24 * 30 + 24 * 46 + 30 * 46 = 3204
* Якщо вам цікаво, як отримати приклад, подібний до наведеного вище, спочатку згенеруйте всі цілі розділи цілого числа M довжиною 3, візьміть їх добуток, знайдіть дублікати та виберіть пару.