Byłem w domu przyjaciela na obiedzie, a oni zasugerowali pomysł na „przestrzeń wektorową czynnika pierwszego”. W tej przestrzeni dodatnie liczby całkowite są wyrażane jako wektor w taki sposób, że n- ty element w wektorze jest liczbą razy, gdy n- ta liczba pierwsza dzieli liczbę. (Zauważ, że oznacza to, że nasze wektory mają nieskończoną liczbę terminów.) Na przykład 20 to
2 0 1 0 0 0 ...
Ponieważ jego pierwsza faktoryzacja wynosi 2 * 2 * 5 .
Ponieważ pierwsza faktoryzacja jest unikalna, każda liczba odpowiada jednemu wektorowi.
Możemy dodawać wektory, dodając ich pary. Jest to to samo, co pomnożenie liczb, z którymi są skojarzone. Możemy również dokonywać mnożenia skalarnego, co jest podobne do podnoszenia powiązanej liczby do potęgi.
Problem polega na tym, że ta przestrzeń nie jest w rzeczywistości przestrzenią wektorową, ponieważ nie ma odwrotności. Jeśli pójdziemy dalej i dodamy odwrotności i zamkniemy przestrzeń wektorową, możemy teraz wyrazić każdą dodatnią liczbę wymierną jako wektor. Jeśli utrzymamy fakt, że dodawanie wektora reprezentuje mnożenie. Zatem odwrotność liczby naturalnej jest odwrotnością.
Na przykład liczba 20 miała wektor
2 0 1 0 0 0 ...
Tak więc ułamek 1/20 jest odwrotny
-2 0 -1 0 0 0 ...
Gdybyśmy chcieli znaleźć wektor związany z ułamkiem takim jak 14/15 , znaleźlibyśmy 14
1 0 0 1 0 0 ...
i 1/15
0 -1 -1 0 0 0 ...
i pomnóż je przez dodanie wektora
1 -1 -1 1 0 0 ...
Teraz, gdy mamy przestrzeń wektorową, możemy ją zmodyfikować, aby utworzyć wewnętrzną przestrzeń produktu, nadając jej wewnętrzny produkt. Aby to zrobić, kradniemy wewnętrzny produkt, który klasycznie podaje przestrzenie wektorowe. Iloczyn wewnętrzny dwóch wektorów jest definiowany jako suma mnożenia parami ich terminów. Na przykład 20,14/15 można obliczyć w następujący sposób
20 = 2 0 1 0 0 0 ...
14/15 = 1 -1 -1 1 0 0 ...
2 0 -1 0 0 0 ... -> 1
Jako kolejny przykład produkt 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
Twoim zadaniem jest wdrożenie programu, który wykonuje ten produkt kropkowy. Powinien przyjmować dwie dodatnie liczby wymierne za pośrednictwem pary dodatnich liczb całkowitych (licznik i mianownik) lub typu wymiernego (liczby zmiennoprzecinkowe są niedozwolone, ponieważ powodują problemy z precyzją i podzielnością) i powinien wypisywać liczbę całkowitą reprezentującą iloczyn iloczynu dwóch wejścia.
To jest golf golfowy, więc odpowiedzi będą liczone w bajtach, przy czym mniej bajtów będzie lepszych.
Przypadki testowe
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