У наші дні стає все складніше і складніше


14

З огляду на непорожній список L цілих чисел , великих 1 , визначимо D (L) як найменше натуральне число таке , що п + d (L) є композит для кожного п в L .

Послідовність a n визначаємо як:

  • a 0 = 2
  • + 1 є найменшим цілим числом , більшим , ніж я таким чином, що D (A 0 , ..., а я , А + 1 )> д (а 0 , ..., а я )

Ваше завдання

Ви можете:

  • Візьміть ціле число N і поверніть N-й член послідовності (0-індексований або 1-індексований)
  • Візьміть ціле число N і поверніть перші N доданків послідовності
  • Не беруть ніяких даних і друкують послідовність назавжди

Це , тому найкоротша відповідь у байтах виграє!

Це нормально, якщо ваш код стає повільним, оскільки N збільшується, але він повинен принаймні знайти 20 перших термінів менш ніж за 2 хвилини.

Перші умови

  • a 0 = 2 і d (2) = 2 (нам потрібно додати 2, щоб 2 + 2 складено)
  • a 1 = 3, оскільки d (2, 3) = 6 (нам потрібно додати 6, щоб 2 + 6 і 3 + 6 були складовими)
  • a 2 = 5, оскільки d (2, 3, 5) = 7 (нам потрібно додати 7, щоб 2 + 7, 3 + 7 і 5 + 7 були всі складові), тоді як d (2, 3, 4) все ще дорівнює 6
  • тощо.

Нижче наведені 100 перших термінів послідовності (невідомі на OEIS на момент публікації).

  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

Відповіді:


1

Pyth, 24 байти

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

Демонстрація

В основному ми починаємо з [2], а потім додаємо елементи 1 по черзі, по черзі знаходячи d, потім додаючи елемент тощо. Виводить перші nелементи послідовності.

Містить фільтр всередині першого цілого фільтра всередині першого цілого фільтра всередині циклу застосованих повторів.

Пояснення:

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

Між двома дзвінками "Додати і перевірити, чи є простим" очевидні повторні зусилля, але я не впевнений, як їх усунути.



1

Сітківка , 74 байти

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

Спробуйте в Інтернеті! 0-індексований. Пояснення:

K`__;

Кожен рядок iв містить два робочої область одинарних значень, aᵢ;d+aᵢ. Починаємо з a₀=2і d+a₀=0(бо це гольфіст).

"$+"{
...
)

Повторіть цикл Nразів.

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

Повторіть, поки є хоча б одне нескладене число.

;
;_

Приріст d.

.+$
$&¶$&

Дублювати останній рядок, копіюючи aᵢ₋₁в aᵢ.

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

Повторіть, поки d+aᵢкомпозиція.

.+$
_$&_

Приріст aᵢ.

%`\G_

Перетворіть результати в десяткові.


1

Чистота , 138 130 128 байт

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

Спробуйте в Інтернеті!

Розширено:

$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

Джулія 0,6 , 145 130 байт

~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])

Спробуйте в Інтернеті!

(-15 байт, використовуючи мої нові та вдосконалені навички гольфу - оператор перевантажує, замінюючи умовні на потрійні, а значить, видаляючи returnключове слово.)

Розширено :

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.