Negatif XOR primerleri


9

Yaklaşık bir yıl önce XOR primerlerini bulmanız istendi . Bunlar, taban 2'de XOR çarpımı yaparken sadece faktörleri 1 ve kendileri olan sayılardır . Şimdi işleri biraz renklendirecektik.

-2 tabanındaki XOR primerini bulacağız

Baz -2'ye Dönüştürme

Baz -2 diğer tüm bazlara çok benzer. En soldaki yer 1'lerin yeri (1 = (-2) 0 ), yanında -2'lerin yeri (-2 = (-2) 1 ), yanında 4'lük yer (4 = (-2) ) 2 ), vb. En büyük fark negatif sayıların taban -2'de herhangi bir olumsuz işaret olmadan temsil edilebilmesidir.

Aşağıda bazı örnek dönüşümler verilmiştir:

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

Baz -2'de XOR ilavesi

Base -2'deki XOR ilavesi, ikili dosyadaki XOR ilavesi ile hemen hemen aynıdır. Sayıyı, her basamaktaki Temel -2 ve XOR'a dönüştürmeniz yeterlidir. (Bu, taşıma olmadan ekleme ile aynıdır)

Adım adım ele alınan bir örnek:

(Sembolü +'Baz -2 XOR eklemesini belirtmek için kullanacağız )

Temel 10'dan başlayın:

6 +' -19

Taban -2'ye dönüştür:

11010 +' 10111

Onları taşımadan ekleyin:

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

Sonuçlarınızı tekrar temel 10'a dönüştürün:

-3

Baz -2'de XOR çarpımı

Bir kez daha temel -2'deki XOR çarpımı, ikili dosyadaki XOR çarpımı ile hemen hemen aynıdır. Eğer taban 2'deki XOR çarpımına aşina değilseniz, burada mükemmel bir açıklama var . İlk önce buna bir göz atmanızı öneririm.

Base XOR çarpma -2 tabanında uzun çarpma gerçekleştirme -2 yerine geleneksel olan sayıların tüm ekleyerek son adımına gelince haricinde aynıdır +kullandığınız +'yukarıda tanımlandığı.

Aşağıda aşağıda bir örnek verilmiştir:

Ondalık olarak başlat:

8 *' 7

Base -2'ye Dönüştür:

11000 *' 11011

Uzun bölüm oluştur:

   11000
*' 11011
---------

İlk sayıyı ikincideki her yerle çarpın

      11000
*'    11011
------------
      11000
     11000
        0
   11000
  11000

Tüm sonuçları baz -2 XOR ilavesiyle toplayın

       11000
*'     11011
-------------
       11000
      11000
         0
    11000
+' 11000
-------------
   101101000

Sonucu ondalığa dönüştür:

280

Meydan okuma

Zorluğunuz, taban -2'de bir sayının XOR asal olup olmadığını doğrulamaktır. Bir sayı, tabandaki sayı ile çarpılan tek tam sayı çifti 1 ve kendiyse, taban -2'deki bir XOR başlangıcıdır. (1 asal değildir)

Eğer giriş -2 falsisinde bir XOR prime ise, bir sayı alır ve bir boolean, doğruluk verirsiniz.

Çözümler, hedef olarak en düşük bayt sayısına ulaşılarak bayt olarak puanlanacaktır.

Test senaryoları

Aşağıdakiler, taban -2'deki tüm XOR primerleridir:

-395
-3
-2
 3
 15
 83

Aşağıdakiler -2 tabanındaki XOR primerleri değildir :

-500
-4
 0
 1
 258
 280

258eşit görünüyor-2 *' -129 = 10 *' 10000011
JungHwan Min

@JungHwanMin benim kötü biri diğer kategoride olması gerekiyordu. Bu size sorun çıkarsa özür dilerim.
Ad Hoc Garf Hunter

Yanıtlar:


3

Mathematica, 156101 bayt

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

Belirtildiği gibi burada , bu eserler nedeniyle XOR çarpma esasen polinom halka F_2 içinde çarpımıdır.

açıklama

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

İle başlayın {input}. Bir sayıyı a(0 ve 1 hariç) amod 2 ile tekrar tekrar değiştirin ve adeğişmeyene kadar -kat ( / 2) ekleyin . Bu, taban -2'deki girişi hesaplar.

FromDigits[ ... ,x]

xDeğişken olarak kullanarak taban -2 sayısının rakamlarını kullanarak bir polinom oluşturun . örneğin {1, 1, 0}->x^2 + x

IrreduciblePolynomialQ[ ... ,Modulus->2]

Elde edilen polinomun modül 2 ile indirgenemez olup olmadığını kontrol edin.

Eski sürüm (156 bayt)

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~#&

Asal sayıların listesi

-1000 ve 1000 arasındaki taban -2 XOR primerlerinin bir listesi (pastebin)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.