Chơi gôn trong các số tự nhiên để ánh xạ các số nguyên tố vào một tập hợp con của các số nguyên tố


14

Các định nghĩa

  • Một song ánh từ một tập Sđến một tập Tlà một hàm từ Sđể Tnhư vậy một phần tử trong Tđược ánh xạ bởi đúng một phần tử trong S.

  • Một bijection trong một bộ S là một bijection từ Sđến S.

  • Các số tự nhiên là các số nguyên lớn hơn hoặc bằng 0.

  • Một tập hợp con của tập hợpS là một tập hợp sao cho mọi phần tử trong tập hợp cũng nằm trong S.

  • Một tập hợp con đúng của một tập Shợp là một tập hợp con Skhông bằng S.

Bài tập

Viết chương trình / hàm lấy số tự nhiên làm đầu vào và xuất số tự nhiên. Nó phải là một mệnh đề và hình ảnh của các số nguyên tố theo chương trình / hàm {f(p) : p ∈ ℙ}, phải là một tập hợp con của , trong đó là các số nguyên tố.

Chấm điểm

Đây là . Câu trả lời ngắn nhất trong byte thắng. Tiêu chuẩn áp dụng .


Câu trả lời:


17

Toán học, 54 48 byte

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

Xác định các mệnh đề sau:

 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, ...

Ý tưởng cơ bản là ánh xạ từng nguyên tố sang kế tiếp, để đảm bảo rằng chúng được ánh xạ tới một tập hợp con thích hợp. Điều này dẫn đến một "khoảng cách" ở 2 . Để lấp đầy khoảng trống đó, chúng tôi muốn ánh xạ 4 đến 2 và sau đó mỗi số tổng hợp khác với số tổng hợp trước đó, để "bong bóng" khoảng cách. Vì 23 là hai số nguyên tố liền kề duy nhất, chúng ta có thể biểu thị cả hai ánh xạ đó là " n-1 hoặc nếu đó là số nguyên tố thì n-2 ". Cuối cùng, ánh xạ này kết thúc việc gửi 1 đến 0 và chúng tôi làm cho nó gửi 0 trở về 1 bằng cách lấy giá trị tuyệt đối của n-1 .


Bạn có cần lập bản đồ 0?
Neil

@ Tôi chưa làm, nhưng dù sao tôi cũng đã thay đổi trang phục.
Martin Ender

8

MATL , 21 byte

Cảm ơn Emigna vì đã phát hiện ra một lỗi, giờ đã sửa

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

Hãy thử trực tuyến!

Điều này thực hiện các mệnh đề sau. Viết các số nguyên tố liên tiếp và các số nguyên tố dưới đây:

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

Sau đó, đầu ra thu được bằng cách làm theo mũi tên từ đầu vào:

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

Mã giải thích

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 byte

Thực hiện logic tương tự như câu trả lời của Luis Mendo .

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

Định dạng và nhận xét

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

Bản giới thiệu


2

Thạch , 12 byte

Æn_ḍ@¡ÆP?2»0

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Æ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, xin vui lòng thêm một lời giải thích?
Erik the Outgolfer

@EriktheOutgolfer Đã thêm.
Dennis

Tốt, bây giờ nhiều người có thể hiểu được mớ hỗn độn này ... điều thực sự quá rõ ràng tại sao tôi không nghĩ về điều đó?
Erik the Outgolfer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.