최소를 계산 이되도록 소수 (OEIS A051935)


12

배경

다음 순서를 고려하십시오 ( OEIS의 A051935 ).

  • 용어 시작하십시오 .2
  • 최소의 정수 찾기 이상 되도록 소수입니다.n22+n
  • 가 소수 등이 되도록 보다 큰 가장 낮은 정수 찾으십시오 .nn2+n+n

보다 공식적인 정의 :

an={2if n=0min{xNx>an1 and (x+i=0n1ai) is prime}otherwise

시퀀스의 처음 몇 가지 용어는 다음과 같습니다 (테스트 사례라고 함).

2, 3, 6, 8, 10, 12, 18, 20, 22, 26, 30, 34, 36, 42, 44, 46, 50, 52, 60, 66, 72, 74, ...

직무

다음 순서 중 하나로이 시퀀스를 생성해야합니다.

  • 용어를 무기한으로 출력합니다.
  • n이 주어지면 n, 출력 an ( nth 항, 0 또는 1 인덱싱 됨).
  • 주어진 n , 출력 {a1,a2,,an} (처음 n 항).

모든 프로그래밍 언어로 경쟁 할 수 있으며 표준 방법을 통해 입력을 받고 출력 할 수 있지만 이러한 허점 은 기본적으로 금지되어 있습니다. 이것은 이므로 모든 언어에 대한 가장 짧은 제출 (바이트)이 이깁니다.


4
과제를 작성하는 동안 피해야 할 팁 : 소수 . 원시성이 아닌 다른 것을 사용할 수 있습니다.
Okx

3
내가 소수성이 시간을 선택하면 @Okx 내가 마음에 몇 가지 이유가 있었다 : 1)이 매우 순서에 특정한 일부 영리한 알고리즘은 하나 같이있다 데니스 구현 2)이 대한 OEIS 항목이 이미 있습니다를
씨 Xcoder

답변:


4

Brachylog , 13 바이트

~l.<₁a₀ᵇ+ᵐṗᵐ∧

온라인으로 사용해보십시오!

출력은 시퀀스 의 처음 n 개의 항의 목록입니다 .

?~l.<₁a₀ᵇ+ᵐṗᵐ∧    Full code (? at beginning is implicit)

?~l.              Output is a list whose length is the input
    <₁            Output is an increasing list
      a₀ᵇ+ᵐ       And the cumulative sum of the output
           ṗᵐ     Consists only of prime numbers
             ∧    No further constraints on output

Explanation for a₀ᵇ+ᵐ:
a₀ᵇ               Get the list of all prefixes of the list
                  Is returned in increasing order of length
                  For eg. [2, 3, 6, 8] -> [[2], [2, 3], [2, 3, 6], [2, 3, 6, 8]]
   +ᵐ             Sum each inner list  -> [2, 5, 11, 19]


4

젤리 , 11 9 바이트

0Ḥ_ÆnɗСI

이것은 n 을 인수로 취하여 시퀀스 의 처음 n 개의 항을 인쇄 하는 전체 프로그램입니다 .

온라인으로 사용해보십시오!

작동 원리

0Ḥ_ÆnɗСI  Main link. Argument: n

0          Set the return value to 0.
      С   Accumulating iterate. When acting on a dyadic link d and called with
           arguments x and y, the resulting quicklink executes
           "x, y = d(x, y), x" n times, returning all intermediate values of x.
           Initially, x = 0 and  y = n.
     ɗ       Drei; combine the three links to the left into a dyadic chain.
 Ḥ             Unhalve; double the left argument.
  _            Subtract the right argument.
   Æn          Compute the next prime.
           This computes the partial sums of the sequence a, starting with 0.
        I  Increments; compute the forward differences.

3

05AB1E v2 , 10 바이트

2λλOD₁+ÅNα

온라인으로 사용해보십시오!

이것은 레거시 버전이 아닌 Elixir 재 작성에서만 작동합니다. 무한 정수 스트림을 출력합니다. 최신 커밋에서 수정되었지만 아직 TIO에서는 작동하지 않는 주요 테스트의 버그가 있습니다. 그러나 로컬에서 작동합니다. 여기에 전체 스트림보다 처음 몇 용어가 아니라 출력에 수정 내 컴퓨터에서의 실행의 GIF입니다.

작동 원리

기본 사례 로 재귀 무한 시퀀스를 정의합니다 . 이 구조는 05AB1E의 매우 멋진 새 기능 중 하나입니다. 간단히 말하면 함수를 사용 을 주어진 정수 인수로 설정 이 경우 .2λa(n)a(0)2

λO

이 코드 부분에서 λ의 역할이 다릅니다. 이미 재귀 환경 내에 있으면서 이전의 모든 결과 목록 인 생성합니다. 그런 다음 합계합니다.[a(0),a(1),,a(n1)]O

D₁+

나중에 사용하기 위해 합계를 복제하고 두 번째 사본 에 을 추가 하십시오.a(n1)

ÅN

위의 합보다 엄청나게 큰 소수를 생성합니다.

α

마지막으로, 위에서 계산 된 소수와 이전에 계산 된 합계의 첫 번째 사본 (모든 이전 반복의 합계) 간의 절대 차이를 검색하십시오.

그런 다음 스트림은 암시 적으로 STDOUT에 무기한으로 인쇄됩니다.


2

펄 6 , 45 바이트

2,{first (*+@_.sum).is-prime,@_[*-1]^..*}...*

온라인으로 사용해보십시오!

끝이없는 시퀀스를 생성하는 지연 목록을 반환합니다.

설명:

...시퀀스를 다음과 같이 정의하는 시퀀스 연산자 를 사용합니다 .

2,  # The first element is 2
  {  # The next element is:
    first  # The first value that:
          (*+@_.sum).is-prime,  # When added to the sum is a prime
          @_[*-1]^..*  # And is larger than the previous element
  }
...*  # And continue the sequence indefinitely



2

Pyth ,12 11 바이트

.f&P-;Z=-;Z

온라인으로 사용해보십시오!

isaacg 덕분에 1 바이트를 절약했습니다.

n1 기반 인덱스를 사용하여 첫 번째 숫자를 생성합니다 .

.fk0부터 시작하여 특정 기준을 만족하는 첫 번째 정수를 찾습니다 . 여기서 기준은 우리가 계산 한 이전 소수 ;와 현재 숫자 Z를 모두 소수 ( P)입니다. 그렇다면 논리 및 함수의 단락 동작 ( &)을 사용하여 마지막으로 계산 된 소수를 업데이트합니다 . 불행히도 .f의 기본 변수는 Z업데이트에서 바이트 비용입니다.

isaacg가 알아 낸 트릭은 마지막 소수의 부정을 저장하고 그 값에서 현재 값을 뺀 값을 테스트하는 것이 었습니다. 우선 순위 검사에 과부하가 걸리기 때문에 이것은 Pyth에서 더 짧습니다.

이것은 다소간에 다음과 같이 번역됩니다.

to_find = input()
last_prime = 0
current = 0
results = []
while to_find > 0:
    if is_prime( current + last_prime ):
        results.append( current )
        to_find -= 1
        last_prime += current
    current += 1
print results

교체 _+-+함께 --1 바이트.
isaacg

@isaacg 정말 영리합니다! 이 부분을 편집하겠습니다.
FryAmTheEggman

2

MATL , 21 바이트

O2hGq:"t0)yd0)+_Yqh]d

온라인으로 사용해보십시오!

출력은 시퀀스 의 처음 n 개의 항입니다.

설명:

프라임 목록 (초기 0)을 구성하고 마지막에 목록에서 연속 프라임 간의 차이를 찾습니다.

              % Implicit input, say n
O2h           % Push P = [0, 2] on the stack 
Gq:"          % for loop: 1 to n-1
  t0)           % Take the last element of P
                %  Stack: [[0, 2], [2]] (in first iteration)
  yd0)          % Take the difference between the last
                %   two elements of P
                %  Stack: [[0, 2], [2], [2]]
  +             % Add those up
                %  Stack: [[0, 2], [4]]
  _Yq           % Get the next prime higher than that sum
                %  Stack: [[0, 2], [5]]
  h             % Concatenate that to the list P
                %  Stack: [[0, 2, 5]]
]             % End for loop
d             % Get the differences between successive elements of
              %   the final list P

2

하스켈 , 67 바이트

(1#1)2 2
(p#n)s k|p`mod`n>0,n-s>k=k:(p#n)n(n-s)|w<-p*n=(w#(n+1))s k

온라인으로 사용해보십시오!

(1#1)2 2A는 어떠한 입력을 취하지 않는 기능 및 무한리스트를 출력한다.


오래된 대답 :

하스켈 , 88 83 78 76 바이트

우선 순위 테스트는 이 답변 에서 얻은 것이며 Christian Sievers (-2 바이트)에 의해 개선되었습니다 .

WW 덕분에 -5 바이트 .

2#2
(p#s)n|n<1=p|w<-until(\m->mod(product[1..m-1])m>0)(+1)$s+p+1=(w-s)#w$n-1

온라인으로 사용해보십시오!


없이 할 수 있습니다 ^2. 이는 술어를 테스트 에서 프라임 에서 테스트 로 프라임 또는 4로 변경하므로이 애플리케이션에서는 중요하지 않습니다.
Christian Sievers

2

05AB1E (레거시) , 12 바이트

0U[XN+DpiN,U

온라인으로 사용해보십시오!

설명

0U              # initialize X as 0
  [             # start an infinite loop
   XN+          # add X to N (the current iteration number)
      Dpi       # if the sum is prime:
         N,     #   print N
           U    #   and store the sum in X

가능한 두 가지 12 바이트 솔루션이 있습니다.
사용 가능한 변수가 0으로 초기화 된 경우 (1과 2 대신)이 특정 바이트는 10 바이트 일 수 있습니다.



1

파이썬 2 , 99 98 바이트

def f(n,s=2,v=2):
 k=s-~v
 while any(k%i<1for i in range(2,k)):k+=1
 return n and f(n-1,k,k-s)or v

온라인으로 사용해보십시오!

Mr. Xcoder에 1 바이트 thx .


1
나는 나와 내 비트 - 트릭의 학자 인 :하지만 당신과 함께 바이트를 저장할 수 있습니다 ... 알아요 ... 알고있다 k=s-~v.
Mr. Xcoder

@씨. Xcoder : 당신의 거룩하지 않은 비트 마법은 아직 당신의 끝이 될 것입니다! :)
Chas Brown

1

하스켈 , 101 99 97 바이트

이 함수 l는 인수를 사용하지 않고 무한 목록을 반환합니다. @ovs 의보다 직접적인 접근 방식 만큼 짧지는 않지만 (그리고 분명히 일부 부품을 훔쳐서 대답 할 수는 있지만) 여전히 골프를 칠 수 있습니까?

-2 바이트에 대한 @ H.PWiz에게 감사합니다!

import Data.List
p m=mod(product[1..m-1])m>0
l=2:[until(p.(+sum a))(+1)$last a+1|a<-tail$inits l]

온라인으로 사용해보십시오!




당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.