Há cerca de um ano, você foi solicitado a encontrar os primos XOR . Esses são números cujos únicos fatores são 1 e eles mesmos ao executar a multiplicação de XOR na base 2 . Agora vamos apimentar um pouco as coisas.
Vamos encontrar os primos XOR na base -2
Convertendo para Base -2
A base -2 é muito parecida com qualquer outra base. O lugar mais à esquerda é o lugar dos 1s (1 = (-2) 0 ), próximo ao local dos -2s (-2 = (-2) 1 ), próximo ao local dos 4s (4 = (-2 ) 2 ) e assim por diante. A grande diferença é que números negativos podem ser representados na base -2 sem nenhum sinal negativo.
Aqui estão alguns exemplos de conversões:
Decimal | Base -2
-----------------
6 | 11010
-7 | 1001
12 | 11100
-15 | 110001
Adição de XOR na Base -2
A adição de XOR na Base -2 é praticamente igual à adição de XOR em binário. Você simplesmente converte o número em Base -2 e XOR cada dígito no lugar. (É o mesmo que adição sem o transporte)
Aqui está um exemplo trabalhado passo a passo:
(Usaremos o símbolo +'
para indicar a adição XOR da Base -2)
Comece na base 10:
6 +' -19
Converta na base -2:
11010 +' 10111
Adicione-os sem carregar:
11010
+' 10111
---------
01101
Converta seu resultado novamente na base 10:
-3
Multiplicação XOR na Base -2
Mais uma vez, a multiplicação de XOR na base -2 é quase a mesma que a multiplicação de XOR em binário. Se você não está familiarizado com a multiplicação de XOR na base 2, há uma excelente explicação aqui . Sugiro que você dê uma olhada nisso primeiro.
A multiplicação XOR na Base -2 é o mesmo que realizar a multiplicação longa na base -2, exceto quando se trata da última etapa, em vez de somar todos os números com um tradicional que +
você usa +'
como definido acima.
Aqui está um exemplo elaborado abaixo:
Iniciar em decimal:
8 *' 7
Converter em Base -2:
11000 *' 11011
Configurar divisão longa:
11000
*' 11011
---------
Multiplique o primeiro número por todos os lugares no segundo
11000
*' 11011
------------
11000
11000
0
11000
11000
Adicione todos os resultados usando a adição -2 XOR de base
11000
*' 11011
-------------
11000
11000
0
11000
+' 11000
-------------
101101000
Converta o resultado novamente em decimal:
280
O desafio
Seu desafio é verificar se um número é ou não um XOR prime na base -2. Um número é um primo XOR na base -2 se o único par de números inteiros que se multiplicar na base for 1 e ele próprio. (1 não é primo)
Você receberá um número e emitirá um valor booleano, na verdade, se a entrada for um XOR prime na base -2, caso contrário, será falso.
As soluções serão pontuadas em bytes com o objetivo de atingir o menor número de bytes.
Casos de teste
A seguir estão todos os números primos XOR na base -2:
-395
-3
-2
3
15
83
Os seguintes não são primos XOR na base -2:
-500
-4
0
1
258
280
fonte
258
parece igual-2 *' -129 = 10 *' 10000011
Respostas:
Mathematica,
156101 bytesComo afirmado aqui , isso funciona porque a multiplicação de XOR é essencialmente multiplicação no anel polinomial F_2.
Explicação
Comece com
{input}
. Substitua repetidamente um númeroa
(exceto 0 e 1) peloa
mod 2 e prepend -floor (a
/ 2), até que ele não seja alterado. Isso calcula a entrada na base -2.Crie um polinômio usando os dígitos do número base -2, usando
x
como variável. por exemplo{1, 1, 0}
->x^2 + x
Verifique se o polinômio resultante é irredutível, com o módulo 2.
Versão antiga (156 bytes)
Lista de números primos
Aqui está uma lista de primos XOR base -2 entre -1000 e 1000 (pastebin)
fonte