Trình tự nảy


19

Hãy để chúng tôi xác định một chuỗi. Chúng ta sẽ nói rằng là số nhỏ nhất, , có các thuộc tính sau:a(n)x

  • x và là đồng nguyên tố (chúng không có yếu tố nào)n

  • x không xuất hiện sớm hơn trong chuỗi

  • |nx|>1

Không giống như hầu hết các chuỗi, miền và phạm vi của chuỗi của chúng tôi là các số nguyên lớn hơn 1.


Hãy để chúng tôi tính toán các điều khoản đầu tiên.

a(2) , phải có ít nhất 4 , nhưng 42 chia sẻ hệ số 2 nên a(2) phải là 5 .

a(3) , phải có ít nhất 5 nhưng 5 được lấy bởia(2) , do đó, ít nhất là 6 , nhưng 6 chia sẻ một yếu tố với 3 để nó phải có ít nhất 7 , 7 đáp ứng cả ba yêu cầu do đóa(3)=7 .

a(4)

  • 2 Chia sẻ một yếu tố
  • 3 quá gần
  • 4 Quá gần
  • 5 quá gần
  • 6 Chia sẻ một yếu tố
  • 7 Lấy bởi một (3)
  • 8 Chia sẻ một yếu tố
  • 9 là tốt

một(5)

  • 2 là tốt

Bài tập

Trong thử thách này, bạn phải viết một chương trình lấy số lớn hơn 1 và trả về .một(n)

Đây là một câu hỏi vì vậy câu trả lời sẽ được tính bằng byte, với ít byte hơn sẽ tốt hơn.

Các trường hợp thử nghiệm

Dưới đây là các thuật ngữ cặp đôi đầu tiên của chuỗi (Tất nhiên chúng được lập chỉ mục 2):

5,7,9,2,11,3,13,4,17,6,19,8,23,22,21,10,25,12,27,16,15,14

Thưởng thực tế

Như được chứng minh bởi Robert Israel trên Math.se ( liên kết ) chuỗi này là nghịch đảo của chính nó, điều đó có nghĩa là với mọi n.a(a(n))=n

OEIS

Sau khi hỏi câu hỏi này, tôi đã gửi trình tự này đến OEIS và sau vài ngày nó đã được thêm vào.

OEIS A290151


Bạn đã tính được bao nhiêu giá trị? (Nói về phần thưởng)
Socratic Phoenix

@SocPhoenix Tôi đã làm bằng tay nên chỉ những cái được hiển thị trong các trường hợp thử nghiệm. Tôi hiện đang gỡ lỗi một chương trình để kiểm tra các giá trị lớn hơn.
Phù thủy lúa mì

1
Như tôi ... hiện tại nó không hoạt động, lập chỉ mục của tôi bị tắt (chỉnh sửa :) và bây giờ nó hoạt động ... 1000 đầu tiên an toàn xD
Socratic Phoenix

Bạn có biết giới hạn trên của một (x) không? Ví dụ: a (x) <u * x cho một số u. Btw vài triệu giá trị đầu tiên là an toàn.
nimi

@nimi Tôi không biết giới hạn trên.
Thuật sĩ lúa mì

Câu trả lời:


8

Haskell , 61 byte

f n=[i|i<-[2..],gcd i n<2,all((/=i).f)[2..n-1],abs(n-i)>1]!!0

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

Tôi khá mới mẻ với Haskell, vì vậy bất kỳ mẹo chơi gôn nào cũng được áp dụng.

Cảm ơn Wheat Wizard cho 2 byte và nimi cho 4 byte

Giải trình:

f n=[i|i<-[2..],gcd i n<2,all((/=i).f)[2..n-1],abs(n-i)>1]!!0
f n=                                                          -- define a function f :: Int -> Int
    [i|i<-[2..],                                              -- out of positive integers greater than two
                gcd i n<2,                                    -- gcd of i and n is 1
                          all((/=i).f)[2..n-1],               -- i isn't already in the sequence
                                               abs(n-i)>1]    -- and |n-i| > 1
                                                          !!0 -- take the first element

2

Alice , 42 byte

/oi
\1@/2-&whq&[]w].q-H.t*n$K.qG?*h$KW.!kq

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

Giải trình

/oi
\1@/.........

Đây là một mẫu tiêu chuẩn cho các chương trình lấy một số làm đầu vào và xuất một số, được sửa đổi để đặt 1 trên ngăn xếp bên dưới số đầu vào.

Phần chính của chương trình đặt từng số kvào khe a(k)trên băng. Vòng lặp bên trong tính a (k) và vòng lặp ngoài lặp lại trên k cho đến khi a (n) được tính.

1       push 1
i       take input
2-&w    repeat n-1 times (push return address n-2 times)
h       increment current value of k
q&[     return tape to position 0
]       move right to position 1
w       push return address to start inner loop
]       move to next tape position
.q-     subtract tape position from k
H       absolute value
.t*     multiply by this amount minus 1
n$K     if zero (i.e., |k-x| = 0 or 1), return to start of inner loop
.qG     GCD(k, x)
?       current value of tape at position: -1 if x is available, or something positive otherwise
*       multiply
h$K     if not -1, return to start of inner loop
W       pop return address without jumping (end inner loop)
.!      store k at position a(k)
k       end outer loop
q       get tape position, which is a(n)
o       output
@       terminate

1

VB.NET (.NET 4.5), 222 byte

Function A(n)
Dim s=New List(Of Long)
For i=2To n
Dim c=2
While Math.Abs(i-c)<2Or g(c,i)>1Or s.Contains(c)
c+=1
End While
s.Add(c)
Next
Return s.Last
End Function
Function g(a, b)
Return If(b=0,a,g(b,a Mod b))
End Function

Tôi đã phải cuộn GCD của riêng bạn. Tôi cũng không thể tìm ra làm thế nào để nó không phải là toàn bộ chức năng.

GCD luôn luôn> = 1, vì vậy chỉ cần bỏ qua 1

Đã xảy ra ngắn mạch trong golf vì nó ngắn hơn

Không chơi gôn

Function Answer(n As Integer) As Integer
    Dim seqeunce As New List(Of Integer)
    For i As Integer = 2 To n
        Dim counter As Integer = 2
        ' took out short-circuiting in the golf because it's shorter
        ' GCD is always >= 1, so only need to ignore 1
        While Math.Abs(i - counter) < 2 OrElse GCD(counter, i) > 1 OrElse seqeunce.Contains(counter)
            counter += 1
        End While
        seqeunce.Add(counter)
    Next
    Return seqeunce.Last
End Function

' roll your own GCD
Function GCD(a, b)
    Return If(b = 0, a, GCD(b, a Mod b))
End Function

Tôi nghĩ rằng .NET không có GCD được xây dựng bên ngoài lớp BigInteger.
Mego


1

Japt , 33 byte (phi cạnh tranh?)

ò2 rÈc_aY >1«XøZ «Yk øZk}a+2}[] o

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

Tôi cố định một lỗi trong Japt Interpreter khi làm việc trên giải pháp này. Bài đăng meta này từ một năm trước cho rằng câu trả lời này không cạnh tranh, nhưng bài đăng meta mới hơn này đang thúc đẩy sự tự do hơn trong việc này. Bất kể, tôi đã dành quá nhiều thời gian cho việc này để loại bỏ nó.


0

05AB1E , 26 byte

2IŸεDU°2Ÿ¯KʒX¿}ʒXα1›}θDˆ}θ

n°T*10*n10n

Giải trình:

2IŸ               # Create a list in the range [2, input]
   ε              # Map each value `y` to:
    DU            #  Store a copy of `y` in variable `X`
    °2Ÿ           #  Create a list in the range [10**`y`,2]
       ¯K         #  Remove all values already in the global_array
       ʒX¿}       #  Only keep values with a greatest common divider of 1 with `X`
       ʒXα1›}     #  Only keep values with an absolute difference larger than 1 with `X`
             θ    #  After these filters: keep the last (the smallest) element
              Dˆ  #  And add a copy of it to the global_array
                # After the map: only leave the last value
                  # (and output the result implicitly)
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.