Semakin sulit untuk menjadi komposit hari ini

14

Mengingat daftar non-kosong L bilangan bulat lebih besar dari 1 , kita mendefinisikan d (L) sebagai terkecil bilangan bulat positif sehingga n + d (L) adalah komposit untuk setiap n di L .

Kami mendefinisikan urutan a n sebagai:

  • a 0 = 2
  • a i + 1 adalah bilangan bulat lebih besar terkecil dari sebuah i sehingga d (a 0 , ..., a i , sebuah i + 1 )> d (a 0 , ..., a i )

Tugas Anda

Anda dapat:

  • Ambil bilangan bulat N dan kembalikan istilah N-th dari urutan (0-diindeks atau 1-diindeks)
  • Ambil bilangan bulat N dan kembalikan syarat N pertama dari urutan tersebut
  • Jangan masukan dan cetak urutannya selamanya

Ini adalah , jadi jawaban tersingkat dalam byte menang!

Tidak apa-apa jika kode Anda semakin lambat karena N semakin besar, tetapi setidaknya harus menemukan 20 istilah pertama dalam waktu kurang dari 2 menit.

Ketentuan pertama

  • a 0 = 2 dan d (2) = 2 (kita perlu menambahkan 2 sehingga 2 + 2 adalah komposit)
  • a 1 = 3 karena d (2, 3) = 6 (kita perlu menambahkan 6 sehingga 2 + 6 dan 3 + 6 adalah komposit)
  • a 2 = 5 karena d (2, 3, 5) = 7 (kita perlu menambahkan 7 sehingga 2 + 7, 3 + 7 dan 5 + 7 semuanya komposit), sedangkan d (2, 3, 4) masih sama dengan 6
  • dll.

Di bawah ini adalah 100 syarat pertama dari urutan (tidak diketahui pada OEIS pada saat posting).

  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
Arnauld
sumber

Jawaban:

1

Pyth, 24 byte

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

Demonstrasi

Pada dasarnya, kita mulai dengan [2], lalu tambahkan elemen 1 sekaligus dengan menemukan secara bergantiand , lalu menambahkan elemen, dan sebagainya. Output yang pertaman elemen dari urutan.

Berisi filter di dalam filter integer pertama di dalam filter integer pertama di dalam loop berulang-ulang yang berlaku.

Penjelasan:

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

Ada upaya berulang yang jelas antara kedua panggilan "Tambah dan periksa jika prima", tapi saya tidak yakin bagaimana cara menghilangkannya.

isaacg
sumber
1

Jelly , 31 byte

ṛ,;1+ÆPẸṆʋ1#ⱮẎ</
Ḷ߀‘Ṫç1#ƊḢƲ2⁸?

Cobalah online!

Jelly mengisap pada urutan pengulangan. : /

Erik the Outgolfer
sumber
1

Retina , 74 byte

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

Cobalah online! Diindeks 0. Penjelasan:

K`__;

Setiap baris idalam workarea berisi dua nilai unary aᵢ;d+aᵢ,. Kita mulai dengan a₀=2dan d+a₀=0(karena itu golfier).

"$+"{
...
)

Ulangi Nkali pengulangan .

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

Ulangi sementara setidaknya ada satu nomor non-komposit.

;
;_

Penambahan d.

.+$
$&¶$&

Gandakan baris terakhir, salin aᵢ₋₁ke aᵢ.

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

Ulangi sementara d+aᵢini komposit.

.+$
_$&_

Penambahan aᵢ.

%`\G_

Ubah hasilnya menjadi desimal.

Neil
sumber
1

Bersih , 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])

Cobalah online!

Diperluas:

$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)
Suram
sumber
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])

Cobalah online!

(-15 byte menggunakan keterampilan golf saya yang baru dan lebih baik - operator kelebihan beban, mengganti kondisional dengan ternary dan karenanya menghapus return kata kunci.)

Diperluas :

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
sundar - Pasang kembali Monica
sumber