负XOR素数


9

大约一年前,您被要求找到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
JungHwan Min

@JungHwanMin我不好意思一个应该属于另一类。如果这给您带来了麻烦,我深表歉意。
Ad Hoc Garf Hunter

Answers:


3

Mathematica,156101字节

IrreduciblePolynomialQ[FromDigits[{#}//.{a_,p___}/;a!=1&&a!=0:>{-⌊a/2⌋,a~Mod~2,p},x],Modulus->2]&

如前所述这里,这个作品是因为XOR乘法本质上是在多项式环F_2乘法。

说明

{#}//.{a_,p___}/;a!=1&&a!=0:>{-⌊a/2⌋,a~Mod~2,p}

从开始{input}。重复用mod 2 替换一个数字a(0和1除外),a并在-floor(a/ 2)之前添加前缀,直到它不变为止。这将以-2为基础计算输入。

FromDigits[ ... ,x]

使用以-2为底的数字创建一个多项式,并将其x用作变量。例如{1, 1, 0}->x^2 + x

IrreduciblePolynomialQ[ ... ,Modulus->2]

检查生成的多项式是否不可约,模数为2。

旧版本(156字节)

If[#==1,1,Outer[FromDigits[BitXor@@(#~ArrayPad~{i++,--l}&)/@Outer[i=0;l=m;1##&,##],-2]&,k=Tuples[{0,1},m=Floor@Log2[8Abs@#~Max~1]]~Drop~{2},k,1,1]]~FreeQ~#&

素数表

以下是-1000和1000之间的基本-2 XOR素数(pastebin)的列表

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.