Estaba cenando en la casa de un amigo y me sugirieron la idea de un "espacio vectorial de factor primo". En este espacio los enteros positivos se expresan como un vector tal que el n -ésimo elemento en el vector es el número de veces que el n º divisiones principales del número. (Tenga en cuenta que esto significa que nuestros vectores tienen un número infinito de términos). Por ejemplo, 20 es
2 0 1 0 0 0 ...
Porque su factorización prima es 2 * 2 * 5 .
Como la factorización prima es única, cada número corresponde a un vector.
Podemos agregar vectores agregando sus entradas por pares. Esto es lo mismo que multiplicar los números con los que están asociados. También podemos hacer una multiplicación escalar, que es similar a elevar el número asociado a una potencia.
El problema es que este espacio no es, de hecho, un espacio vectorial porque no hay inversos. Si continuamos y sumamos los inversos y cerramos el espacio vectorial, ahora tenemos una forma de expresar cada número racional positivo como un vector. Si mantenemos el hecho de que la suma de vectores representa la multiplicación. Entonces el inverso de un número natural es su recíproco.
Por ejemplo, el número 20 tenía el vector
2 0 1 0 0 0 ...
Entonces la fracción 1/20 es inversa
-2 0 -1 0 0 0 ...
Si quisiéramos encontrar el vector asociado con una fracción como 14/15 , encontraríamos 14
1 0 0 1 0 0 ...
y 1/15
0 -1 -1 0 0 0 ...
y multiplíquelos realizando la suma vectorial
1 -1 -1 1 0 0 ...
Ahora que tenemos un espacio vectorial, podemos modificarlo para formar un espacio interno del producto dándole un producto interno. Para hacer esto, robamos el producto interno que los espacios vectoriales se dan clásicamente. El producto interno de dos vectores se define como la suma de la multiplicación por pares de sus términos. Por ejemplo 20 · 14/15 se calcularía de la siguiente manera
20 = 2 0 1 0 0 0 ...
14/15 = 1 -1 -1 1 0 0 ...
2 0 -1 0 0 0 ... -> 1
Como otro ejemplo, el producto 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
Su tarea es implementar un programa que realice este producto punto. Debe tomar dos números racionales positivos a través de un par de enteros positivos (numerador y denominador) o de un tipo racional (no se permiten los flotantes, porque causan problemas con la precisión y la divisibilidad) y debe generar un número entero que represente el producto de punto de los dos entradas
Este es el código de golf, por lo que las respuestas se puntuarán en bytes, con menos bytes mejor.
Casos de prueba
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