요즘에는 합성하기가 점점 힘들어지고 있습니다


14

비어리스트 주어 L 보다 큰 정수 1 , 우리는 정의 D (L) 작은 양의 정수와 같은 N + D (L)복합NL을 .

시퀀스 a n 을 다음과 같이 정의합니다 .

  • a 0 = 2
  • 난 + 1 보다 작은 정수 큰 A는 내가 되도록 D (a 0 , ...하는 I 하는 I + 1 )> D (a 0 , ...하는 I )

당신의 작업

다음 중 하나 일 수 있습니다.

  • 정수 N을 취하여 시퀀스 의 N 번째 항을 반환합니다 (0 인덱스 또는 1 인덱스)
  • 정수 N 을 취하고 시퀀스 의 첫 번째 N 항을 반환
  • 입력하지 않고 시퀀스를 영원히 인쇄

이것은 이므로 바이트 단위의 최단 답변이 이깁니다!

N 이 커질수록 코드 속도가 느려지더라도 괜찮지 만 적어도 2 분 안에 첫 번째 20 개 항을 찾아야합니다.

첫 번째 용어

  • a 0 = 2d (2) = 2 (2 + 2가 합성되도록 2를 더해야 함)
  • d (2, 3) = 6 이므로 a 1 = 3 ( 2 + 6과 3 + 6이 합성되도록 6을 더해야 함)
  • A는 2 = 5 때문에 D (2, 3, 5) 7 = 반면, (우리가 너무 2 + 7 + 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시퀀스 의 첫 번째 요소를 출력합니다 .

Apply 반복 루프 내의 첫 번째 정수 필터 안에 첫 번째 정수 필터 안에 필터가 들어 있습니다.

설명:

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

두 개의 "Add and Check if Prim"호출 사이에 반복적 인 노력이 있지만이를 제거하는 방법을 잘 모르겠습니다.



1

레티 나 , 74 바이트

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

온라인으로 사용해보십시오! 인덱스가 0입니다. 설명:

K`__;

i작업 영역의 각 줄 에는 두 개의 단항 값이 aᵢ;d+aᵢ있습니다. 우리는 시작 a₀=2d+a₀=0(때문에의 golfier).

"$+"{
...
)

루프 N시간을 반복하십시오 .

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

하나 이상의 비 복합 숫자가있는 동안 반복하십시오.

;
;_

증분 d.

.+$
$&¶$&

에 복사하여 마지막 줄을 복제 aᵢ₋₁하십시오 aᵢ.

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

d+aᵢ합성 하는 동안 반복하십시오 .

.+$
_$&_

증분 aᵢ.

%`\G_

결과를 10 진수로 변환하십시오.


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 , 145130 바이트

~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 바이트-연산자 오버로드, 조건부를 3 진으로 대체하여 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.