大约一年前,您被要求找到XOR素数。这些是在以2为底进行XOR乘法时其唯一因子为1的数字,以及它们本身。现在将使事情变得更加有趣。
我们将在基数-2中找到XOR质数
转换为基-2
基数-2与其他所有基数非常相似。最左边的位置是1s位置(1 =(-2)0),其旁边是-2s位置(-2 =(-2)1),其次是4s位置(4 =(-2 )2),依此类推。最大的不同是,负数可以以-2为基表示,而没有任何负号。
以下是一些示例转换:
Decimal | Base -2
-----------------
6 | 11010
-7 | 1001
12 | 11100
-15 | 110001
Base -2中的XOR加法
Base -2中的XOR加法与二进制中的XOR加法几乎相同。您只需将数字转换为Base -2并在适当的位置对每个数字进行XOR。(这与没有进位的加法相同)
这是逐步完成的示例:
(我们将使用符号+'
表示以-2为基数的XOR加法)
从基数10开始:
6 +' -19
转换为基数-2:
11010 +' 10111
添加它们时不要携带:
11010
+' 10111
---------
01101
将结果转换回以10为基数:
-3
Base -2中的XOR乘法
同样,基数为-2的XOR乘法与二进制的XOR乘法几乎相同。如果您不熟悉以2为底的XOR乘法,这里有一个很好的解释,我建议您先看一看。
Base -2中的XOR乘法与在base -2中执行长乘法相同,只不过涉及到最后一步,而不是+
使用+'
上面定义的传统方法将所有数字相加。
下面是一个示例:
以十进制开头:
8 *' 7
转换为基数-2:
11000 *' 11011
设置长除法:
11000
*' 11011
---------
将第一个数字乘以第二个数字
11000
*' 11011
------------
11000
11000
0
11000
11000
使用以-2为底的XOR加法将所有结果相加
11000
*' 11011
-------------
11000
11000
0
11000
+' 11000
-------------
101101000
将结果转换回十进制:
280
挑战
您面临的挑战是验证数字是否以2为底的XOR质数。如果在基数上乘以整数的唯一一对整数本身是1,则数字在基数-2中是XOR质数。(1不是素数)
如果输入是以-2为基的XOR素数,则您将输入一个数字并输出一个布尔值,如实,否则为false。
解决方案将以达到最低字节数为目标的字节数进行评分。
测试用例
以下是以-2为底的所有XOR质数:
-395
-3
-2
3
15
83
以下不是以-2为底的XOR素数:
-500
-4
0
1
258
280
258
似乎相等-2 *' -129 = 10 *' 10000011