음의 XOR 소수


9

약 1 년 전에 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로 변환합니다. (이것은 캐리없이 추가와 동일합니다)

다음은 단계별로 작업 한 예입니다.

(기호 +'를 사용하여 Base -2 XOR 추가를 나타냅니다)

10 진부터 시작하십시오 :

6 +' -19

기본 -2로 변환 :

11010 +' 10111

휴대하지 않고 추가하십시오.

   11010
+' 10111
---------
   01101

결과를 다시 기본 10으로 변환하십시오.

-3

밑이 -2 인 XOR 곱셈

베이스 -2의 XOR 곱셈은 이진의 XOR 곱셈과 거의 같습니다. base 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 소수이면 숫자를 가져 와서 부울 값을 출력합니다.

솔루션은 목표로 가장 적은 바이트 수를 달성하여 바이트 단위로 점수가 매겨집니다.

테스트 사례

다음은 기본 -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

답변:


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]

x변수로 사용하여 밑수 -2 숫자의 자릿수를 사용하여 다항식을 만듭니다 . 예 : {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 소수 목록입니다 (파스트 빈).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.