จำนวน XOR ติดลบ


9

เกี่ยวกับปีที่ผ่านมาคุณถูกถามเพื่อหาช่วงเวลาที่แฮคเกอร์ เหล่านี้เป็นตัวเลขที่มีเพียงปัจจัยคือ 1 และตัวเองเมื่อทำการXOR คูณในฐาน 2 ตอนนี้กำลังจะทำให้เครื่องเทศเพิ่มขึ้นเล็กน้อย

พวกเราจะไปหาช่วงเวลา XOR ในฐาน-2

แปลงเป็นฐาน -2

ฐาน -2 เป็นจำนวนมากเหมือนฐานอื่น ๆ สถานที่ที่เหลือมากที่สุดคือสถานที่ 1 แห่ง (1 = (-2) 0 ) ถัดจากสถานที่ 2 แห่ง (-2 = (-2) 1 ) ถัดจากนั้นคือสถานที่ 4s (4 = (-2 ) 2 ) และอื่น ๆ เป็นต้น ความแตกต่างใหญ่คือตัวเลขลบสามารถแสดงในฐาน -2 โดยไม่มีเครื่องหมายลบใด ๆ

นี่คือตัวอย่างการแปลง:

Decimal | Base -2
-----------------
 6      |   11010
-7      |    1001
 12     |   11100
-15     |  110001

XOR เพิ่มเติมในฐาน -2

การเพิ่ม XOR ใน Base -2 นั้นคล้ายคลึงกับการเพิ่ม XOR ในไบนารี คุณเพียงแปลงตัวเลขเป็น Base -2 และ XOR แต่ละหลักแทน (นี่เป็นเช่นเดียวกับการเพิ่มโดยไม่มีการพกพา)

นี่คือตัวอย่างการทำงานทีละขั้นตอน:

(เราจะใช้สัญลักษณ์+'เพื่อระบุ Base -2 XOR นอกจากนี้)

เริ่มในฐาน 10:

6 +' -19

แปลงเป็นฐาน -2:

11010 +' 10111

เพิ่มโดยไม่ต้องถือ:

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

แปลงผลลัพธ์ของคุณกลับไปเป็นฐาน 10:

-3

การคูณ XOR ในฐาน -2

การคูณ XOR อีกครั้งในฐาน -2 เกือบจะเหมือนกับการคูณ XOR ในไบนารี หากคุณไม่คุ้นเคยกับการคูณ XOR ในฐาน 2 มีคำอธิบายที่ดีที่นี่ฉันขอแนะนำให้คุณดูที่แรก

การคูณ XOR ใน Base -2 เหมือนกับการคูณยาวในฐาน -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

ความท้าทาย

ความท้าทายของคุณคือการตรวจสอบว่าตัวเลขนั้นเป็น XOR prime ในฐาน -2 หรือไม่ ตัวเลขคือ XOR prime ในฐาน -2 หากคู่จำนวนเต็มเท่านั้นที่คูณกับมันในฐานคือ 1 และตัวมันเอง (1 ไม่ใช่เฉพาะ)

คุณจะใช้จำนวนและเอาท์พุทบูลีนความจริงถ้าอินพุตเป็น XOR prime ในฐาน -2 ผิดพลาดเป็นอย่างอื่น

การแก้ปัญหาจะทำคะแนนเป็นไบต์ด้วยการบรรลุจำนวนไบต์ต่ำสุดเป็นเป้าหมาย

กรณีทดสอบ

ต่อไปนี้เป็นช่วงเวลา XOR ทั้งหมดในฐาน -2:

-395
-3
-2
 3
 15
 83

ต่อไปนี้ไม่ใช่ช่วงเวลา XOR ในฐาน -2:

-500
-4
 0
 1
 258
 280

258ดูเหมือนจะเท่าเทียมกัน-2 *' -129 = 10 *' 10000011
JungHwan Min

@JungHwanMin ฉันไม่ดีที่ควรจะอยู่ในหมวดหมู่อื่น ๆ ฉันขอโทษถ้าสิ่งนี้ทำให้คุณมีปัญหาใด ๆ
Ad Hoc Garf Hunter

คำตอบ:


3

Mathematica, 156 101 ไบต์

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}เริ่มต้นด้วย แทนที่ตัวเลขซ้ำa(ยกเว้น 0 และ 1) ด้วยamod 2 และ prepend - ชั้น ( 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~#&

รายชื่อเฉพาะช่วงเวลา

นี่คือรายการของค่าฐาน -2 XOR ระหว่าง -1000 ถึง 1000 (pastebin)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.