नकारात्मक XOR primes


9

लगभग एक साल पहले आपको XOR primes खोजने के लिए कहा गया था । ये वे संख्याएँ हैं जिनके केवल कारक 1 हैं और जब बेस 2 में XOR गुणन करते हैं तो स्वयं । अब चीजों को थोडा थूकने जा रहे थे।

हम बेस -2 में XOR प्राइम खोजने जा रहे हैं

बेस -2 में परिवर्तित

बेस -2 हर दूसरे बेस की तरह है। सबसे बाईं ओर 1 स्थान (1 = (-2) 0 ) है, उसके आगे -2 s स्थान (-2 = (-2) 1 ) है, उसके बगल में 4s स्थान (4 = (-2) है ) 2 ), और इतने पर और आगे। बड़ा अंतर यह है कि आधार संख्या को ऋणात्मक संख्या में बिना किसी नकारात्मक चिन्ह के दर्शाया जा सकता है।

यहाँ कुछ उदाहरण रूपांतरण हैं:

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

बेस -2 में XOR जोड़

बेस -2 में XOR का जोड़ बाइनरी में XOR के अलावा बहुत ज्यादा है। आप बस संख्या को आधार -2 और XOR को प्रत्येक अंक में बदल देते हैं। (यह बिना कैरी के समान है)

यहाँ एक उदाहरण के माध्यम से कदम से कदम काम किया है:

(हम +'बेस -2 XOR को इंगित करने के लिए प्रतीक का उपयोग करेंगे )

आधार 10 में शुरू करें:

6 +' -19

आधार -2 में बदलें:

11010 +' 10111

बिना ले जाने के उन्हें जोड़ें:

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

अपना परिणाम वापस आधार 10 में परिवर्तित करें:

-3

बेस -2 में XOR गुणा

आधार -2 में एक बार फिर XOR गुणा गुणा बाइनरी में XOR गुणा के समान है। यदि आप बेस 2 में XOR गुणन से परिचित नहीं हैं, तो एक उत्कृष्ट स्पष्टीकरण यहाँ है, मेरा सुझाव है कि आप पहले उस पर एक नज़र डालें।

बेस -2 में XOR का गुणा बेस -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 प्राइम है या नहीं। एक संख्या आधार -2 में एक XOR प्राइम है यदि पूर्णांकों की एकमात्र जोड़ी जो इसे आधार में गुणा करती है 1 और स्वयं। (1 अभाज्य नहीं है)

आप एक संख्या में ले जाएंगे और एक बुलियन का उत्पादन करेंगे, अगर इनपुट बेस -2 झूठा है तो इनपुट एक XOR प्राइम है।

लक्ष्य के रूप में सबसे कम संख्या में बाइट प्राप्त करने के साथ बाइट्स में समाधान बनाए जाएंगे।

परीक्षण के मामलों

आधार -2 में निम्नलिखित सभी XOR प्राइम हैं:

-395
-3
-2
 3
 15
 83

आधार -2 में निम्नलिखित XOR प्राइम नहीं हैं :

-500
-4
 0
 1
 258
 280

258बराबर लगता है-2 *' -129 = 10 *' 10000011
जंगवान मिन

@JungHwanMin मेरी बुरी बात है कि एक को दूसरे वर्ग में होना चाहिए था। अगर इससे आपको कोई परेशानी हुई है तो मैं माफी चाहता हूं।
तदर्थ गार्फ हंटर

जवाबों:


3

गणितज्ञ, 156 101 बाइट्स

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

जैसा कि यहां कहा गया है , यह काम करता है क्योंकि बहुपद अंगूठी F_2 में XOR गुणन अनिवार्य रूप से गुणा है।

व्याख्या

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

से शुरू करें {input}। बार-बार एक नंबर a(0 और 1 को छोड़कर) को amod 2 और prepend -floor ( a/ 2) से बदलें, जब तक कि इसमें बदलाव न हो। यह बेस -2 में इनपुट की गणना करता है।

FromDigits[ ... ,x]

xचर के रूप में आधार -2 संख्या के अंकों का उपयोग करके एक बहुपद बनाएं । जैसे {1, 1, 0}->x^2 + x

IrreduciblePolynomialQ[ ... ,Modulus->2]

जाँचें कि परिणामी बहुपद irreducible है, मापांक 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~#&

Primes की सूची

यहां आधार -2 XOR की सूची -1000 और 1000 (पास्टबिन) के बीच है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.