約1年前、XOR素数を見つけるように求められました。これらは、基数2でXOR乗算を実行するときの唯一の因子が1である数値とそれ自体です。今は少し物事を盛り上げるつもりでした。
XOR素数をベース-2で見つけます。
Base -2への変換
ベース-2は他のすべてのベースとよく似ています。左端の場所は1の場所(1 =(-2)0)であり、その隣に-2の場所(-2 =(-2)1)があり、その隣に4の場所(4 =(-2 )2)など。大きな違いは、負の数は負の符号なしでbase -2で表すことができることです。
変換の例をいくつか示します。
Decimal | Base -2
-----------------
6 | 11010
-7 | 1001
12 | 11100
-15 | 110001
Base -2でのXOR追加
Base -2でのXOR追加は、バイナリでのXOR追加とほとんど同じです。単に数値をBase -2に変換し、各桁のXORをXORします。(これはキャリーなしの加算と同じです)
以下は、ステップバイステップの例です。
(記号+'
を使用して、Base -2 XOR加算を示します)
ベース10から開始:
6 +' -19
基数-2に変換:
11010 +' 10111
持ち運びせずに追加:
11010
+' 10111
---------
01101
結果を元の10に変換します。
-3
Base -2でのXOR乗算
ここでも、ベース-2でのXOR乗算は、バイナリでのXOR乗算とほぼ同じです。基数2でのXOR乗算に慣れていない場合は、ここに優れた説明があります。最初にそれを確認することをお勧めします。
BaseのXORの乗算は-2ベースに長い乗算を行う-2ではなく、伝統的なと数字のすべてを合算の最終段階に来るときを除いて同じである+
あなたが使用し+'
、我々は上記で定義されています。
以下に例を示します。
10進数で開始:
8 *' 7
ベース-2に変換:
11000 *' 11011
ロングディビジョンを設定します。
11000
*' 11011
---------
最初の数値に2番目のすべての場所を掛けます
11000
*' 11011
------------
11000
11000
0
11000
11000
base -2 XOR加算を使用してすべての結果を合計します
11000
*' 11011
-------------
11000
11000
0
11000
+' 11000
-------------
101101000
結果を10進数に戻します。
280
チャレンジ
あなたの課題は、数値が基数-2のXOR素数であるかどうかを確認することです。基数で乗算される整数のペアが1とそれ自体の場合、数値は基数-2のXOR素数です。(1は素数ではありません)
数値を取り込んでブール値を出力します。入力がベース-2のXOR素数であれば真であり、それ以外の場合は偽です。
ソリューションは、最小バイト数を目標として、バイト単位でスコアリングされます。
テストケース
以下は、ベース-2のすべてのXOR素数です。
-395
-3
-2
3
15
83
以下は、base -2のXOR素数ではありません。
-500
-4
0
1
258
280
258
等しいようです-2 *' -129 = 10 *' 10000011