Il y a environ un an, on vous a demandé de trouver les nombres premiers XOR . Ce sont des nombres dont les seuls facteurs sont 1 et eux-mêmes lors de la multiplication XOR en base 2 . Maintenant, nous allons pimenter un peu les choses.
Nous allons trouver les nombres premiers XOR en base -2
Conversion en base -2
La base -2 ressemble beaucoup à toutes les autres bases. La place la plus à gauche est la place 1s (1 = (-2) 0 ), à côté de la place -2s (-2 = (-2) 1 ), à côté de la place 4s (4 = (-2 ) 2 ), et ainsi de suite. La grande différence est que les nombres négatifs peuvent être représentés en base -2 sans signe négatif.
Voici quelques exemples de conversions:
Decimal | Base -2
-----------------
6 | 11010
-7 | 1001
12 | 11100
-15 | 110001
Ajout de XOR dans Base -2
L'addition XOR en Base -2 est à peu près la même que l'addition XOR en binaire. Vous convertissez simplement le nombre en Base -2 et XOR chaque chiffre en place. (C'est la même chose que l'ajout sans le portage)
Voici un exemple travaillé étape par étape:
(Nous utiliserons le symbole +'
pour indiquer l'addition XOR Base -2)
Départ en base 10:
6 +' -19
Convertir en base -2:
11010 +' 10111
Ajoutez-les sans porter:
11010
+' 10111
---------
01101
Convertissez votre résultat en base 10:
-3
Multiplication XOR en Base -2
Une fois de plus, la multiplication XOR en base -2 est presque la même que la multiplication XOR en binaire. Si vous n'êtes pas familier avec la multiplication XOR en base 2, il y a une excellente explication ici, je vous suggère de jeter un œil à cela en premier.
La multiplication XOR en Base -2 est la même que la multiplication longue en base -2 sauf quand il s'agit de la dernière étape au lieu de additionner tous les nombres avec un traditionnel que +
vous utilisez celui que +'
nous avons défini ci-dessus.
Voici un exemple élaboré ci-dessous:
Commencez en décimal:
8 *' 7
Convertir en base -2:
11000 *' 11011
Mettre en place une division longue:
11000
*' 11011
---------
Multipliez le premier nombre par chaque place dans le second
11000
*' 11011
------------
11000
11000
0
11000
11000
Additionnez tous les résultats en utilisant l'addition XOR base -2
11000
*' 11011
-------------
11000
11000
0
11000
+' 11000
-------------
101101000
Convertissez le résultat en décimal:
280
Le défi
Votre défi consiste à vérifier si un nombre est ou non un nombre XOR premier en base -2. Un nombre est un nombre XOR premier en base -2 si la seule paire d'entiers qui s'y multiplient en base est 1 et lui-même. (1 n'est pas premier)
Vous prendrez un nombre et sortirez un booléen, véridique si l'entrée est un nombre XOR premier en base -2 sinon.
Les solutions seront notées en octets avec comme objectif d'atteindre le plus petit nombre d'octets.
Cas de test
Les éléments suivants sont tous des nombres premiers XOR en base -2:
-395
-3
-2
3
15
83
Les éléments suivants ne sont pas des nombres premiers XOR en base -2:
-500
-4
0
1
258
280
la source
258
semble égal-2 *' -129 = 10 *' 10000011
Réponses:
Mathematica,
156101 octetsComme indiqué ici , cela fonctionne parce que la multiplication XOR est essentiellement une multiplication dans l'anneau polynomial F_2.
Explication
Commencez par
{input}
. Remplacez à plusieurs reprises un nombrea
(sauf 0 et 1) par lea
mod 2 et ajoutez -floor (a
/ 2), jusqu'à ce qu'il ne change pas. Ceci calcule l'entrée en base -2.Créez un polynôme en utilisant les chiffres du nombre de base -2, en utilisant
x
comme variable. par exemple{1, 1, 0}
->x^2 + x
Vérifiez si le polynôme résultant est irréductible, avec le module 2.
Ancienne version (156 octets)
Liste des nombres premiers
Voici une liste de nombres premiers XOR de base -2 entre -1000 et 1000 (pastebin)
la source