Asal sayıları asal sayıların uygun bir alt kümesiyle eşleştiren doğal sayılar içinde bir bijection yapın


14

Tanımlar

  • Bir bijection kümesinden Sbir dizi Tbir fonksiyonudur Siçin Tde bu şekilde bir eleman Ttam olarak tek bir eleman ile eşleştirilir S.

  • Bir küme S içindeki bir bijection, Sile arasındaki bir bijection'dır S.

  • Doğal sayılar daha büyük olan ya da eşit olan tam sayılardır 0.

  • Bir kümenin alt kümesi S, kümedeki her öğenin de içinde olacağı şekilde bir kümedirS .

  • Bir alt kümesi uygun bir dizi Salt kümesi olan bir dizi Seşit olmadığı S.

Görev

Doğal bir sayıyı girdi olarak alan ve doğal bir sayı çıkaran bir program / işlev yazın. Bir bijection olmalı ve program / fonksiyon altındaki primerlerin görüntüsü, asal sayıların nerede olduğu {f(p) : p ∈ ℙ}uygun bir alt küme olmalıdır .

puanlama

Bu . Bayt cinsinden en kısa cevap kazanır. Standart boşluklar geçerlidir .


Yanıtlar:


17

Mathematica, 5448 bayt

±(t=x_?PrimeQ)=NextPrime@x
±n_:=Abs[n-1]/.t:>x-1

Aşağıdaki seçimleri tanımlar:

 n  0, 1, 2, 3, 4, 5, 6,  7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ...
±n  1, 0, 3, 5, 2, 7, 4, 11, 6, 8,  9, 13, 10, 17, 12, 14, 15, 19, ...

Temel fikir, uygun bir alt kümeye eşlendiklerinden emin olmak için her bir asalı bir sonrakine eşlemektir. Bu, 2'de bir "boşluk" ile sonuçlanır . Bu boşluğu doldurmak için, boşluğu "patlatmak" için 4 ile 2 ve daha sonra da birbirlerinden bileşik numaralarını önceki bileşik numarayla eşlemek istiyoruz . Yana 2 ve 3 sadece iki komşu Asal sayılar, biz bu eşleştirmeleri her iki ifade "olabilir , n-1 veya bir asal sonra ise n-2 ". Son olarak, bu haritalama gönderme yukarı uçları 1 ile 0 ve bunu göndermek yapmak 0 için geri 1 mutlak değerini alarak n-1 .


Haritaya ihtiyacınız var 0mı?
Neil

@Benim yapıyorum, ama yine de bijection'ı değiştirdim.
Martin Ender

8

MATL , 21 bayt

Emigna'ya bir hata tespit ettiği için teşekkürler , şimdi düzeltildi

tZp?_Yq}q:Zp~fX>sG~E+

Çevrimiçi deneyin!

Bu, aşağıdaki hükmü uygular. Asalları arka arkaya ve asal olmayanları aşağıya yazın:

2  3  5  7 11 13 17 ...
0  1  4  6  8  9 10 ...

Daha sonra çıkış, girişteki oku takip ederek elde edilir:

2 > 3 > 5 > 7 > 11 > 13 > 17 ...
^
0 < 1 < 4 < 6 <  8 <  9 < 10 ...

Açıklanan kod

t       % Implicit input. Duplicate
Zp      % Is it a prime? Gives true / false
?       % If so
  _Yq   %   Next prime
}       % Else
  q     %   Subtract 1
  :     %   Range from 1 to that
  Zp~   %   Is each entry not a prime? Gives an array of true / false
  f     %   Find non-zero entries, i.e. non-primes. Will be empty for input 1
  X>    %   Maximum. This gives the greatest non-prime less than the input.
        %   Will be empty for input 1
  s     %   Sum. This is to transform empty into 0
  G~E   %   Push input, negate, times 2. This gives 2 for input 0, or 0 otherwise
  E     %   Add. This handles the case of input 0, so that it outputs 2
        % End (implicit). Display (implicit)


3

JavaScript (ES6), 82 77 75 bayt

Luis Mendo'nun cevabı ile aynı mantığı uygular .

f=(n,i=(P=(n,x=n)=>n%--x?P(n,x):x==1||-1)(x=n))=>x?x==n|P(n)-i?f(n+i,i):n:2

Biçimlendirilmiş ve yorumlanmış

f = (                   // given:
  n,                    // - n = input
  i =                   // - i = 'direction' to move towards
    (P = (n, x = n) =>  // - P = function that returns:
      n % --x ?         //   - 1 when given a prime
        P(n, x)         //   - -1 when given a composite number
      :                 //
        x == 1 || -1    //
    )(x = n)            // - x = copy of the original input
) =>                    //
  x ?                   // if the input is not zero:
    x == n | P(n) - i ? //   if n equals the input or doesn't match its primality:
      f(n + i, i)       //     do a recursive call in the chosen direction
    :                   //   else:
      n                 //     return n
  :                     // else:
    2                   //   return 2

gösteri


2

Jöle , 12 bayt

Æn_ḍ@¡ÆP?2»0

Çevrimiçi deneyin!

Nasıl çalışır

Æn_ḍ@¡ÆP?2»0  Main link. Argument: n (non-negative integer)

      ÆP?     If the input is prime:
Æn                Compute the next prime after n.
              Else:
   ḍ@¡   2        Do once if n is divisible by 2, zero times if not.
  _      2        Subtract 2.
              So far, we've mapped all primes to the next prime, all even integers
              (except 2) to the previous even integer, and all composite, odd,
              positive integers to themselves. In particular, 0 -> 2, but 0 doesn't
              have a preimage, so we need 0 -> 0.
          »0  Take the maximum of the result and 0, mapping 0 -> max(-2, 0) = 0.

Umm, lütfen bir açıklama ekleyin?
Outgolfer Erik

@EriktheOutgolfer Eklendi.
Dennis

Güzel, şimdi daha fazla insan bu karışıklığı anlayabiliyor ... bu aslında çok açık.
Outgolfer Erik
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.