Я був у будинку друга на вечерю, і вони запропонували ідею "простору вектора основного фактору". У цьому просторі додатні цілі числа виражаються у вигляді вектора такого, що n- й елемент у векторі - це кількість разів, де n- го простих ділить число. (Зверніть увагу, що це означає, що наші вектори мають нескінченну кількість термінів.) Наприклад 20 є
2 0 1 0 0 0 ...
Тому що його основна факторизація становить 2 * 2 * 5 .
Оскільки проста множина є унікальною, кожне число відповідає одному вектору.
Ми можемо додати вектори, попарно додавши їх записи. Це те саме, що множення чисел, з якими вони пов'язані. Ми також можемо зробити скалярне множення, яке схоже на підняття асоційованого числа до потужності.
Проблема полягає в тому, що цей простір насправді не є векторним простором, оскільки немає зворотів. Якщо ми продовжимо додавання обертів і закриємо векторний простір, тепер у нас є спосіб виразити кожне позитивне раціональне число як вектор. Якщо ми збережемо той факт, що векторне додавання являє собою множення. Тоді зворотне натуральне число є його зворотним.
Наприклад, число 20 мало вектор
2 0 1 0 0 0 ...
Значить, частка 1/20 - це її обернена
-2 0 -1 0 0 0 ...
Якби ми хотіли знайти вектор, асоційований із дробом на зразок 14/15, ми знайшли б 14
1 0 0 1 0 0 ...
та 1/15
0 -1 -1 0 0 0 ...
і помножте їх, виконуючи векторне додавання
1 -1 -1 1 0 0 ...
Тепер, коли у нас є векторний простір, ми можемо модифікувати його, щоб утворювати внутрішній простір продукту, надаючи йому внутрішній продукт. Для цього ми вкрадаємо внутрішній продукт, у якому векторні простори задані класично. Внутрішній добуток двох векторів визначається як сума попарного множення їх доданків. Наприклад, 20 · 14/15 буде обчислено наступним чином
20 = 2 0 1 0 0 0 ...
14/15 = 1 -1 -1 1 0 0 ...
2 0 -1 0 0 0 ... -> 1
В якості іншого прикладу добуток 2/19 · 4/19
2/19 = 1 0 0 0 0 0 0 -1 0 0 0 ...
4/19 = 2 0 0 0 0 0 0 -1 0 0 0 ...
2 0 0 0 0 0 0 1 0 0 0 ... -> 3
Ваше завдання - реалізувати програму, яка виконує цей точковий продукт. Він повинен приймати два позитивних раціональних числа або через пару натуральних чисел (чисельник і знаменник), або раціональний тип (поплавці заборонені, оскільки вони створюють проблеми з точністю і роздільністю) і повинні вивести ціле число, що представляє крапковий добуток двох входи.
Це кодовий гольф, тому відповіді будуть набрані в байтах, а менша кількість байтів буде кращою.
Випробування
4 · 4 = 4
8 · 8 = 9
10 · 10 = 2
12 · 12 = 5
4 · 1/4 = -4
20 · 14/15 = 1
2/19 · 4/19 = 3