В наши дни становиться все сложнее и сложнее


14

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

Определим последовательность a n как:

  • 0 = 2
  • a i + 1 - наименьшее целое число, большее, чем a i, такое, что d (a 0 , ..., a i , a i + 1 )> d (a 0 , ..., a i )

Твое задание

Вы можете либо:

  • Возьмите целое число 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])

Попробуйте онлайн!

Expanded:

$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.