Ngày càng khó hơn để được tổng hợp


14

Cho một danh sách không rỗng L các số nguyên lớn hơn 1 , chúng ta định nghĩa d (L) là số nguyên dương nhỏ nhất mà n + d (L)tổng hợp cho mỗi n trong L .

Chúng tôi xác định chuỗi a n là:

  • a 0 = 2
  • a i + 1 là số nguyên nhỏ nhất lớn hơn a i sao cho d (a 0 , ..., a i , a i + 1 )> d (a 0 , ..., a i )

Nhiệm vụ của bạn

Bạn có thể:

  • Lấy một số nguyên N và trả về số hạng N của chuỗi (0-index hoặc 1-index)
  • Lấy một số nguyên N và trả về các số hạng N đầu tiên của chuỗi
  • Không có đầu vào và in chuỗi mãi mãi

Đây là , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng!

Sẽ ổn nếu mã của bạn trở nên chậm hơn khi N lớn hơn, nhưng ít nhất nó sẽ tìm thấy 20 điều khoản đầu tiên trong vòng chưa đầy 2 phút.

Điều khoản đầu tiên

  • a 0 = 2d (2) = 2 (chúng ta cần thêm 2 để 2 + 2 là hợp số)
  • a 1 = 3d (2, 3) = 6 (chúng ta cần thêm 6 sao cho 2 + 6 và 3 + 6 là hợp số)
  • a 2 = 5d (2, 3, 5) = 7 (chúng ta cần thêm 7 sao cho 2 + 7, 3 + 7 và 5 + 7 đều là hợp số), trong khi d (2, 3, 4) vẫn là bằng 6
  • Vân vân.

Dưới đây là 100 điều khoản đầu tiên của chuỗi (chưa biết trên OEIS tại thời điểm đăng).

  2,   3,   5,   6,  10,  15,  17,  19,  22,  24,
 30,  34,  35,  39,  41,  47,  51,  54,  56,  57,
 70,  79,  80,  82,  92,  98, 100, 103, 106, 111,
113, 116, 135, 151, 158, 162, 165, 179, 183, 186,
191, 192, 200, 210, 217, 223, 226, 228, 235, 240,
243, 260, 266, 274, 277, 284, 285, 289, 298, 307,
309, 317, 318, 329, 341, 349, 356, 361, 374, 377,
378, 382, 386, 394, 397, 405, 409, 414, 417, 425,
443, 454, 473, 492, 494, 502, 512, 514, 519, 527,
528, 560, 572, 577, 579, 598, 605, 621, 632, 642

Câu trả lời:


1

Bình thường, 24 byte

Pu+GfP_+Tf!fP_+ZYG)eGQ]2

Trình diễn

Về cơ bản, chúng tôi bắt đầu với [2], sau đó thêm các yếu tố 1 tại một thời điểm bằng cách luân phiên tìm kiếm d, sau đó thêm một yếu tố, v.v. Xuất ra các nphần tử đầu tiên của chuỗi.

Chứa bộ lọc bên trong bộ lọc số nguyên đầu tiên bên trong bộ lọc số nguyên đầu tiên bên trong vòng lặp lặp lại áp dụng.

Giải trình:

Pu+GfP_+Tf!fP_+ZYG)eGQ]2
 u                   Q]2    Starting with `[2]`, do the following as many times
                            as the input
         f        )         Starting from 1 and counting upward, find d where
          !f     G          None of the elements in the current list
            P_+ZY           plus d give a prime.
    f              eG       Starting from the end of the current list and counting
                            upward, find the first number which
     P_+T                   plus d gives a prime.
  +G                        Append the new number to the current list
P                           Trim the last element of the list

Có nhiều nỗ lực lặp đi lặp lại rõ ràng giữa hai cuộc gọi "Thêm và kiểm tra nếu chính", nhưng tôi không chắc làm thế nào để loại bỏ nó.



1

Võng mạc , 74 byte

K`__;
"$+"{/;(?!(__+)\1+\b)/+`;
;_
.+$
$&¶$&
)/;(__+)\1+$/+`.+$
_$&_
%`\G_

Hãy thử trực tuyến! Chỉ số 0. Giải trình:

K`__;

Mỗi dòng itrong workarea chứa hai giá trị đơn nguyên , aᵢ;d+aᵢ. Chúng tôi bắt đầu với a₀=2d+a₀=0(vì đó là golfier).

"$+"{
...
)

Lặp lại Nthời gian lặp .

/;(?!(__+)\1+\b)/+`

Lặp lại trong khi có ít nhất một số không tổng hợp.

;
;_

Tăng d.

.+$
$&¶$&

Nhân đôi dòng cuối cùng, sao chép aᵢ₋₁vào aᵢ.

/;(__+)\1+$/+`

Lặp lại trong khi d+aᵢlà tổng hợp.

.+$
_$&_

Tăng aᵢ.

%`\G_

Chuyển đổi kết quả thành số thập phân.


1

Sạch , 138 130 128 byte

import StdEnv
$l=until(\v=all(\n=any((<)1o gcd(n+v))[2..n+v-1])l)inc 1

map hd(iterate(\l=hd[[n:l]\\n<-[hd l..]| $[n:l]> $l])[2])

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

Mở rộng:

$l=until(\v=all(\n=any((<)1o gcd(n+v))[2..n+v-1])l)inc 1
$l=until(                                         )inc 1  // first value from 1 upwards where _
         \v=all(                                )l        // _ is true for everything in l
                \n=any(              )[2..n+v-1]          // any of [2,3..n+v-1] match _
                             gcd(n+v)                     // the gcd of (n+v) and ^
                           o                              // (composed) ^ is _
                       (<)1                               // greater than 1

map hd(iterate(\l=hd[[n:l]\\n<-[hd l..]| $[n:l]> $l])[2]) 
map hd(                                                 ) // the first element of each list in _
       iterate(                                     )[2]  // infinite repeated application of _ to [2]
               \l=hd[                              ]      // the head of _
                     [n:l]                                // n prepended to l
                          \\n<-[hd l..]                   // for every integer n greater than the head of l
                                       | $[n:l]> $l       // where d(n0..ni+1) > d(n0..ni)

1

Julia 0,6 , 145 130 byte

~L=(x=1;while any(map(m->all(m%i>0 for i=2:m-1),L+x));x+=1;end;x)
!n=n<1?[2]:(P=!(n-1);t=P[end]+1;while ~[P;t]<=~P;t+=1;end;[P;t])

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

(-15 byte sử dụng các kỹ năng chơi gôn mới và được cải thiện của tôi - quá tải người vận hành, thay thế điều kiện bằng ternary và do đó loại bỏ returntừ khóa.)

Mở rộng :

function primecheck(m)
    all(m%i>0 for i2:m-1)
end

function d(L)
    x = 1
    while any(map(primecheck, L+x))
        x += 1
    end
    return x
end

function a(n)
    n > 0 || return [2]
    Prev = a(n-1)
    term = Prev[end] + 1
    while d([Prev;term])  d(Prev)
        term += 1
    end
    return [Prev;term]
end
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.