J'étais chez un ami pour le dîner et ils ont suggéré l'idée d'un "espace vectoriel à facteur premier". Dans cet espace, les entiers positifs sont exprimés comme un vecteur de telle sorte que le n ème élément dans le vecteur soit le nombre de fois que le n e premier divise le nombre. (Notez que cela signifie que nos vecteurs ont un nombre infini de termes.) Par exemple, 20 est
2 0 1 0 0 0 ...
Parce que sa factorisation première est 2 * 2 * 5 .
Puisque la factorisation première est unique, chaque nombre correspond à un vecteur.
Nous pouvons ajouter des vecteurs en ajoutant par paire leurs entrées. Cela revient à multiplier les nombres auxquels ils sont associés. Nous pouvons également faire une multiplication scalaire, ce qui revient à élever le nombre associé à une puissance.
Le problème est que cet espace n'est pas en fait un espace vectoriel car il n'y a pas d'inverses. Si nous allons de l'avant et ajoutons les inverses et fermons l'espace vectoriel, nous avons maintenant un moyen d'exprimer chaque nombre rationnel positif comme un vecteur. Si l'on garde le fait que l'addition vectorielle représente la multiplication. L'inverse d'un nombre naturel est alors sa réciproque.
Par exemple, le nombre 20 avait le vecteur
2 0 1 0 0 0 ...
La fraction 1/20 est donc son inverse
-2 0 -1 0 0 0 ...
Si nous voulions trouver le vecteur associé à une fraction comme 14/15, nous trouverions 14
1 0 0 1 0 0 ...
et 1/15
0 -1 -1 0 0 0 ...
et les multiplier en effectuant l'addition de vecteurs
1 -1 -1 1 0 0 ...
Maintenant que nous avons un espace vectoriel, nous pouvons le modifier pour former un espace de produit intérieur en lui donnant un produit intérieur. Pour ce faire, nous volons le produit intérieur que les espaces vectoriels sont donnés de façon classique. Le produit intérieur de deux vecteurs est défini comme la somme de la multiplication par paire de leurs termes. Par exemple, 20 · 14/15 serait calculé comme suit
20 = 2 0 1 0 0 0 ...
14/15 = 1 -1 -1 1 0 0 ...
2 0 -1 0 0 0 ... -> 1
Comme autre exemple, le produit 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
Votre tâche consiste à implémenter un programme qui exécute ce produit scalaire. Il doit prendre deux nombres rationnels positifs via une paire d'entiers positifs (numérateur et dénominateur) ou un type rationnel (les flottants ne sont pas autorisés, car ils posent des problèmes de précision et de divisibilité) et doit générer un entier représentant le produit scalaire des deux. contributions.
Il s'agit de code-golf donc les réponses seront notées en octets avec moins d'octets mieux.
Cas de test
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