Số tổng hợp trước đây


16

Định nghĩa trình tự

Xây dựng một chuỗi các số nguyên dương a(n)như sau:

  1. a(0) = 4
  2. Mỗi số hạng a(n), trừ số đầu tiên, là số nhỏ nhất thỏa mãn các điều sau:
    a) a(n)là số tổng hợp,
    b) a(n) > a(n-1)
    c) a(n) + a(k) + 1là số tổng hợp cho mỗi số 0 <= k < n.

Vì vậy, chúng tôi bắt đầu với a(0) = 4. Các mục tiếp theo, a(1)phải được 9. Nó không thể 5hoặc 7vì những thứ đó không phải là hỗn hợp, và nó không thể 6hoặc 8bởi vì 6+4+1=11nó không phải là hỗn hợp và 8+4+1=13không phải là hỗn hợp. Cuối cùng, 9+4+1=14đó là composite, vì vậy a(1) = 9.

Mục tiếp theo, a(2)phải là 10, vì nó là số nhỏ nhất lớn hơn so 9với 10+9+1=2010+4+1=15cả tổng hợp.

Đối với mục tiếp theo, 1113cả hai đều ra vì chúng không phải là tổng hợp. 12là ra bởi vì 12+4+1=17đó không phải là tổng hợp. 14là ra bởi vì 14+4+1=19đó không phải là tổng hợp. Vì vậy, 15là một thuật ngữ tiếp theo của chuỗi vì 15là composite và 15+4+1=20, 15+9+1=2515+10+1=26tất cả đều từng hỗn hợp, vì vậy a(3) = 15.

Dưới đây là 30 thuật ngữ đầu tiên trong chuỗi này:

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

Đây là OEIS A133764 .

Thử thách

Cho một số nguyên đầu vào n, đầu ra nthuật ngữ thứ trong chuỗi này.

Quy tắc

  • Bạn có thể chọn lập chỉ mục dựa trên 0 hoặc 1. Vui lòng cho biết trong trình của bạn.
  • Đầu vào và đầu ra có thể được coi là phù hợp với kiểu số nguyên của ngôn ngữ của bạn.
  • Đầu vào và đầu ra có thể được cung cấp bởi bất kỳ phương pháp thuận tiện .
  • Một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

3
Tiêu đề: Số trước đây được gọi là tổng hợp.
Bạch tuộc ma thuật Urn

@MagicOctopusUrn Nếu điều này có liên quan đến nghệ thuật hoặc âm nhạc, tôi sẽ làm theo. Nhưng, tôi sẽ gắn bó với danh hiệu mà tôi hiện đang có.
admBorkBork

Là một trò đùa nhiều hơn;).
Bạch tuộc ma thuật Urn

Câu trả lời:


5

Husk , 11 byte

!üȯṗ→+fotpN

1 chỉ mục. Hãy thử trực tuyến!

Giải trình

!üȯṗ→+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

Perl 6 , 70 byte

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

Dùng thử 0 chỉ mục

Mở rộng:

{  # 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

JavaScript (ES6), 83 byte

1 chỉ mục

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

Bản giới thiệu

Đã bình luận

Hàm trợ giúp P () , trả về true nếu n là số nguyên tố hoặc sai khác:

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

NB: Nó phải được gọi với x = n .

Hàm chính 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

Java 8, 186 173 byte

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;}

Chỉ số 0.
Thật không may, kiểm tra chính (hoặc kiểm tra chống tố / tổng hợp trong trường hợp này) không rẻ bằng Java ..

Giải trình:

Hãy thử trực tuyến.

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

Ruby + -rprime, 85 75 byte

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

Hãy thử trực tuyến!

Một lambda trả về phần tử thứ n được lập chỉ mục 0.

-10 byte: Sử dụng redovà toán tử ternary thay vì loop... breakvà chuỗi có điều kiện

Ung dung:

->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
}


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.