Số nguyên dương nhỏ nhất tương ứng với hai tiền thân cuối cùng và chưa xuất hiện; a (1) = 1, a (2) = 2


10

Định nghĩa

  • Hai số nguyên là nguyên tố cùng nhau nếu chúng không chia các ước chung chung nào khác ngoài 1.
  • a(1) = 1
  • a(2) = 2
  • a(n)là số nguyên dương nhỏ nhất đó là nguyên tố cùng nhau đến a(n-1)a(n-2)và chưa xuất hiện, đối với số nguyên n >= 3.

Bài tập

  • Cho số nguyên dương n, đầu ra / in a(n).

Thí dụ

  • a(11) = 6bởi vì 6là đồng thời với hai người tiền nhiệm cuối cùng (cụ thể là 1113) và 6chưa xuất hiện trước đó.

Ghi chú

  • Lưu ý rằng chuỗi không tăng dần, có nghĩa là một phần tử có thể nhỏ hơn phần trước.

Thông số kỹ thuật

  • Bạn phải sử dụng 1 chỉ mục.

Tủ thử

n      a(n)
1      1
2      2
3      3
4      5
5      4
6      7
7      9
8      8
9      11
10     13
11     6
12     17
13     19
14     10
15     21
16     23
17     16
18     15
19     29
20     14
100    139
1000   1355
10000  13387
100000 133361

Chấm điểm

  • Vì đồng thời có nghĩa là hai số chỉ chia sẻ một số chia ( 1) và 1là một số nhỏ, mã của bạn phải càng nhỏ càng tốt về mặt đếm byte.

Người giới thiệu


4
Những "lý do" cho mã ngắn ...
Luis Mendo

1
Tôi tự hỏi tại sao điều này đã bị hạ thấp. Chắc chắn không phải vì lý do khủng khiếp?
Conor O'Brien

@Conor Không phải tôi. Thật ra tôi đã nâng đỡ. Tôi hy vọng mọi người sẽ thấy cả lý do và nhận xét của tôi là trò đùa
Luis Mendo

3
Vấn đề với những lời biện minh "hài hước" này đối với môn đánh gôn là tôi cần đọc một câu chuyện dở khóc dở cười kéo dài bốn dòng chỉ để biết rằng đây là môn đánh gôn tiêu chuẩn. Nó chỉ đơn giản là che khuất các quy tắc của thách thức mà không có lý do chính đáng.
Martin Ender

1
@ ConorO'Brien Không phải tất cả các trình duyệt luôn hiển thị tiêu đề (và sau đó là ứng dụng dành cho thiết bị di động) và chúng tôi thường mô tả cách tính điểm trong bài viết ngoài việc sử dụng thẻ, vì chỉ riêng thẻ không có ý nghĩa gì với những người mới vào trang web. Mặc dù tôi quen thuộc với các thẻ thử thách loại của chúng tôi, tôi không bao giờ đọc chúng để tìm ra cách là một thách thức được ghi nhưng cố gắng để thấy rằng trong cơ thể thách thức. Thẻ này là để phân loại, tìm kiếm và thông tin cụ thể loại thách thức trong wiki thẻ.
Martin Ender

Câu trả lời:


5

Python 3.5, 160 141 126 124 121 109 byte

Đây là một thực hiện đơn giản của định nghĩa của trình tự. Gợi ý chơi golf chào mừng.

Chỉnh sửa: -17 byte nhờ Leaky Nun. -9 byte nhờ Peter Taylor. -6 byte nhờ Sp3000 và chuyển sang Python 3.5.

import math;f=lambda n,r=[2,1],c=3:n<2and r[1]or(c in r)+math.gcd(c,r[0]*r[1])<2and f(n-1,[c]+r)or f(n,r,c+1)

Ungolfing:

import math
def f(n, r=[2,1], c=3):
    if n<2:
        return r[1]
    elif (c in r) + math.gcd(c,r[0]*r[1]) < 2:
        return f(n-1, [c]+r)
    else:
        return f(n, r, c+1)

Đối với Python 3.5+, import maththì g=math.gcdnên ngắn hơn định nghĩa của riêng bạn g. Đối với trước 3,5, bạn có thể làm from fractions import*cho gcd.
Sp3000

Nếu bạn khởi tạo c=3bên trong vòng lặp, bạn chỉ cần thực hiện một lần. Theo tính của tôi, bạn tiết kiệm được 3 ký tự.
Peter Taylor

Ngoài ra còn có một tiết kiệm 2 char từ việc xây dựng mảng theo cách khác: bạn phải sử dụng r=[c]+rchứ không phải +=, nhưng ba chỉ số tiêu cực trở nên tích cực. Và sau đó có thêm 2 char tiết kiệm từ việc viết lại thành lambda, mặc dù đó là một thay đổi khá lớn: from fractions import*;F=lambda n,r=[2,1],c=3:n<2and r[1]or(c in r)+gcd(r[0]*r[1],c)<2and F(n-1,[c]+r)or F(n,r,c+1)và không cần printvì nó không còn là một chương trình đầy đủ.
Peter Taylor

2

MATL , 28 27 byte

2:i:"`@ym1MTF_)Zdqa+}@h]]G)

Mã chậm, nhưng cho kết quả chính xác.

Hãy thử trực tuyến! Hoặc xác minh mười trường hợp đầu tiên .

Một sửa đổi nhỏ của mã tạo ra một âm mưu của chuỗi:

2:i:"`@ym1MTF_)Zdqa+}@h]]G:)XG

Xem nó như nghệ thuật ASCII hoặc với đầu ra đồ họa trong trình biên dịch ngoại tuyến:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Giải trình

2:         % Push [1 2] to initiallize the sequence
i:         % Input n. Push [1 2 ... n]
"          % For loop: repeat n times
  `        %   Do while loop
    @      %     Push iteration index, starting at 1. This is the candidate number
           %     to extend the sequence
    y      %     Duplicate vector containing the sequence so far
    m      %     Is member? Gives true if the candidate is in the sequence
    1M     %     Push candidate and vector again
    TF_)   %     Get last two elements of the vector
    Zd     %     GCD between the candidate and those two elements. Produces a
           %     two-element vector
    qa     %     True if any of the two results exceeds 1, meaning
           %     the candidate is not coprime with the latest two sequence values
    +      %     Add. This corresponds to logical "or" of the two conditions, namely
           %     whether the candidate is member of the sequence so far, and
           %     whether it is not coprime with the latest two. In either case
           %     the do...while must continue with a next iteration, to try a new
           %     candidate. Else the loop is exited, and the current candidate
           %     is the new value of the sequence
  }        %   Finally (execute when the loop is exited)
    @h     %     Push current candidate and concatenate to the sequence vector
  ]        %   End do...while
]          % End for
G)         % Get n-th value of the sequence. Implicitly display

1

C, 185 byte

G(a,b){return a%b?G(b,a%b):b;}
i,j,k;f(n){int a[n+2];for(i=0;i++<n;){a[i]=i<3?i:0;for(j=2;!a[i];++j){for(k=i;--k;){if(a[k]==j)++j,k=i;}a[G(a[i-1],j)*G(a[i-2],j)<2?i:0]=j;}}return a[n];}

1

Trên thực tế , 38 37 35 33 31 30 byte

Đây là một thực hiện đơn giản của định nghĩa chức năng. Gợi ý chơi golf chào mừng. Hãy thử trực tuyến!

Chỉnh sửa: -3 byte nhờ Leaky Nun.

2R#╗,;`1";2±╜tπg@╜í+Y"£╓╖`nD╜E

Ungolfing:

2R#╗    Push [1,2] and store it in register 0
,;      Take input and duplicate
`1      Start function, push 1
  "       Start string
  ;       Duplicate i
  2±╜t    Push (list in register 0)[-2:]
  πg      gcd(i, product of list[-2:])
  @╜í     Rotate the gcd and bring up i, check for i in list (0-based, -1 if not found)
  +Y      Add the gcd and the index, negate (1 if coprime and not found in list, else 0)
  "£      End string, turn into a function
╓       Push first (1) values where f(x) is truthy, starting with f(0)
╖`      Append result to the list in register 0, end function
n       Run function (input) times
D╜E     Return (final list)[n-1]

1
Thao tác ngăn xếp nhiều
Leaky Nun

0

Haskell, 81 73 byte

c l@(m:n:_)=m:c([x|x<-[1..],gcd(m*n)x<2,all(/=x)l]!!0:l)
((0:1:c[2,1])!!)

Ví dụ sử dụng: ((0:1:c[2,1])!!) 12-> 17.

Xây dựng danh sách tất cả a(n), bắt đầu với 0để sửa chỉ mục dựa trên 1 1và sau đó c[2,1]. cđứng đầu danh sách đối số của nó, ltheo sau là một cuộc gọi đệ quy với số tiếp theo phù hợp (đồng nguyên tố, không thấy trước đó) được thêm vào trước l. Chọn nphần tử thứ của danh sách này.


0

R, 141 byte

 f=Vectorize(function(n)ifelse(n>3,{c=3;a=f(n-1);b=f(n-2);d=f(4:n-3);while(!c%%which(!a%%1:a)[-1]||!c%%which(!b%%1:b)[-1]||c%in%d)c=c+1;c},n))

vô dụng

f=Vectorize( function(n)     #build a recursive function. Vectorize allows
    if(n>3) {                #the function to be called on vectors.
        c=3                  #Tests size. Builds some frequent variables.
        a=f(n-1)
        b=f(n-2)
        d=f(4:n-3)           #Should really golf this out, but its horribly slow.
        while(!c%%which(!a%%1:a)[-1]||!c%%which(!b%%1:b)[-1]||c%in%d)
              c=c+1          #If we are coprime and not already seen. add.
        c
     } else n)               #First three are 1,2,3.

0

Toán học, 97 90 byte

a@1=1;a@2=2;a@n_:=SelectFirst[Range[2n],GCD[a[n-1]a[n-2],#]<2&&!MemberQ[a/@Range[n-1],#]&]

Dựa trên phỏng đoán của tôi rằng a(n) < 2n cho tất cả n.

Để chạy nhanh hơn, hãy thêm a@n=vào sau bản gốc :=để hàm không cần tính toán lại các giá trị trước đó .

Đã lưu 7 byte nhờ Sherlock9 (nếu gcd(a,b)=1sau đó gcd(ab,m) = gcd(a,m)*gcd(b,m))


Đó không phải là một phỏng đoán, vì nó được viết trong trang OEIS rằng " ABS(a(n)-n) < n"
Leaky Nun

@LeakyNun Cảm ơn. Trang OEIS đã ngừng hoạt động cho đến một lúc trước, và tôi đã lo lắng về một ví dụ có thể xảy ra cho lớn n.
cho Monica

0

Bình thường, 23 byte

eu+Gf&-TGq1iT*F>2G1tQ]1

Bộ kiểm tra

Một cách thực hiện khá đơn giản, nhưng với một số thủ thuật đánh golf đẹp.

eu+Gf&-TGq1iT*F>2G1tQ]1
 u                 tQ]1    Apply the following function input - 1 times,
                           where G is the current state (List of values so far)
  +G                       Add to G
    f             1        The first number, counting up from 1
      -TG                  That has not been seen so far
     &                     And where
               >2G         The most recent two numbers
             *F            Multiplied together
           iT              Gcd with the current number being checked
         q1                Equals 1
e                          Output the final element of the list.
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.