이전에는 복합 숫자


16

시퀀스 정의

a(n)다음과 같이 양의 정수 시퀀스를 구성하십시오 .

  1. a(0) = 4
  2. a(n)첫 번째가 아닌 각 항 은 다음을 만족하는 가장 작은 수입니다.
    a) a(n)복소수,
    b) a(n) > a(n-1)
    c)a(n) + a(k) + 1 각각에 대한 합성 수있다 0 <= k < n.

우리는로 시작합니다 a(0) = 4. 다음 항목은 a(1)이어야합니다 9. 그것은 합성이 아니 5거나 7그럴 수 없으며 합성이 아니 6거나 합성이 아니 거나 불가능 8하기 때문 6+4+1=11입니다 8+4+1=13. 마지막으로, 9+4+1=14합성 a(1) = 9입니다.

다음 항목 은 with 및 둘 다 보다 가장 작은 수이므로 a(2)이어야합니다 .10910+9+1=2010+4+1=15

다음 항목에 대해, 11그리고 13그들이 합성하지이기 때문에 모두 밖으로이다. 합성이 아니기 12때문에 나옵니다 12+4+1=17. 합성이 아니기 14때문에 나옵니다 14+4+1=19. 따라서 15시퀀스의 다음 항 15은 합성 15+4+1=20이므로15+9+1=25 그리고 15+10+1=26따라서 모든 각 복합 재료이다 a(3) = 15.

이 순서에서 처음 30 개의 용어는 다음과 같습니다.

4, 9, 10, 15, 16, 22, 28, 34, 35, 39, 40, 46, 52, 58, 64, 70, 75, 76, 82, 88, 94, 100, 106, 112, 118, 119, 124, 125, 130, 136

이것은 OEIS A133764 .

도전

입력 정수 주어 n출력 상기n 이 시퀀스에서 세 번째 항을 .

규칙

  • 0 또는 1 기반 인덱싱을 선택할 수 있습니다. 제출 한 내용을 기재하십시오.
  • 입력 및 출력은 언어의 기본 정수 유형에 맞는 것으로 가정 할 수 있습니다.
  • 입력 및 출력은 편리한 방법 으로 제공 할 수 있습니다 .
  • 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

3
제목 : 이전에 복합으로 알려진 숫자입니다.
Magic Octopus Urn

@MagicOctopusUrn 만약 이것이 예술이나 음악과 관련이 있다면, 함께 갈 것입니다. 그러나 나는 현재 가지고있는 제목을 고수 할 것이다.
AdmBorkBork

더 농담이었다;).
Magic Octopus Urn

답변:


5

껍질 , 11 바이트

!üȯṗ→+fotpN

1- 색인. 온라인으로 사용해보십시오!

설명

!üȯṗ→+fotpN  Implicit input, a number n.
          N  The list of positive integers [1,2,3,4,..
      f      Keep those
         p   whose list of prime factors
       ot    has a nonempty tail: [4,6,8,9,10,12,..
 ü           De-duplicate wrt this equality predicate:
     +       sum
    →        plus 1
  ȯṗ         is a prime number.
             Result is [4,9,10,15,16,..
!            Get n'th element.

2

펄 6 , 70 바이트

{(4,->+_{first {none($^a X+0,|(_ X+1)).is-prime},_.tail^..*}...*)[$_]}

0 인덱스로 시도하십시오.

넓히는:

{  # bare block lambda with implicit parameter $_

  (  # generate the sequence

    4, # seed the sequence

    -> +_ { # pointy block that has a slurpy list parameter _ (all previous values)

      first

      {  # bare block with placeholder parameter $a

        none(                 # none junction
            $^a               # placeholder parameter for this inner block
          X+                
            0,                # make sure $a isn't prime
            |( _ X+ 1 )       # check all a(k)+1
        ).is-prime            # make sure none are prime
      },

      _.tail ^.. *            # start looking after the previous value
    }

    ...                       # keep generating values until

    *                         # never stop

  )[$_]                       # index into the sequence
}


2

자바 스크립트 (ES6), 83 바이트

1- 색인

f=(n,a=[-1,p=4])=>a[n]||f(n,a.some(x=>(P=n=>n%--x?P(n):x<2)(x-=~p),p++)?a:[...a,p])

데모

댓글

도우미 함수 P () , 반환 진정한 경우 n은 소수이거나, 거짓 , 그렇지

P = n => n % --x ? P(n) : x < 2

NB : x = n 으로 호출해야합니다. .

주요 기능 f () :

f = (               // given:
  n,                //   n = target index
  a = [-1, p = 4]   //   a = computed sequence with an extra -1 at the beginning
) =>                //   p = last appended value
  a[n] ||           // if a[n] exists, stop recursion and return it
  f(                // otherwise, do a recursive call to f() with:
    n,              //   n unchanged
    a.some(x =>     //   for each value x in a[]:
      P(x -= ~p),   //     rule c: check whether x + p + 1 is prime
                    //     rule a: because a[0] = -1, this will first compute P(p)
      p++           //     rule b: increment p before the some() loop starts
    ) ?             //   end of some(); if truthy:
      a             //     p is invalid: use a[] unchanged
    :               //   else:
      [...a, p]     //     p is valid: append it to a[]
  )                 // end of recursive call



0

자바 8 186 173 바이트

n->{int a[]=new int[n+1],r=a[n]=4;a:for(;n>0;)if(c(++r)<2){for(int x:a)if(x>0&c(r-~x)>1)continue a;a[--n]=r;}return r;}int c(int n){for(int i=2;i<n;n=n%i++<1?0:n);return n;}

인덱스가 0입니다.
불행히도 프라임 체크 (또는이 경우 프라임 / 컴포지트 체크)는 Java에서 그렇게 싸지 않습니다.

설명:

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

n->{                     // Method with integer as both parameter and return-type
  int a[]=new int[n+1],  //  Integer-array of size `n+1`
      r=a[n]=4;          //  Start the result and last item at 4
  a:for(;n>0;)           //  Loop as long as `n` is larger than 0
    if(c(++r)<2){        //   Raise `r` by 1, and if it's a composite:
      for(int x:a)       //    Inner loop over the array
        if(x>0           //     If the item in the array is filled in (non-zero),
           &c(r-~x)>1)   //     and if `r+x+1` is a prime (not a composite number):
          continue a;}   //      Continue the outer loop
      a[--n]=r;}         //    Decrease `n` by 1, and put `r` in the array
  return r;}             //  Return the result

// Separated method to check if a given number is a composite number
// (It's a composite number if 0 or 1 is returned, otherwise it's a prime.)
int c(int n){for(int i=2;i<n;n=n%i++<1?0:n);return n;}

0

루비 + -rprime, 85 75 바이트

->n{*a=x=4
n.times{x+=1;!x.prime?&&a.none?{|k|(x+k+1).prime?}?a<<x:redo}
x}

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

0 인덱스 n 번째 요소를 반환하는 람다.

-10 바이트 : ... 및 조건부 체인 redo대신 및 삼항 연산자를 사용하십시오.loopbreak

언 골프 드 :

->n{
  *a=x=4                         # x is the most recent value: 4
                                 # a is the list of values so far: [4]
  n.times{                       # Repeat n times:
    x += 1                       # Increment x
    !x.prime? &&                 # If x is composite, and
      a.none?{|k|(x+k+1).prime?} #   for all k, a(n)+x+1 is composite,
      ? a<<x                     # Add x to a
      : redo                     # Else, restart the block (go to x+=1)
  }
  x                              # Return the most recent value
}


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