Tính tối thiểu


12

Lý lịch

Hãy xem xét trình tự sau ( A051935 trong OEIS):

  • Bắt đầu với thuật ngữ .2
  • Tìm số nguyên thấp nhất lớn hơn 2 sao cho 2 + n là số nguyên tố.n22+n
  • Tìm các số nguyên thấp nhất lớn hơn n2 + n + n ' là số nguyên tố, vvnn2+n+n

Một định nghĩa chính thức hơn:

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

Một vài điều khoản đầu tiên của chuỗi là (vui lòng xem chúng như các trường hợp thử nghiệm):

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

Bài tập

Nhiệm vụ của bạn là tạo ra chuỗi này theo bất kỳ cách nào sau đây:

  • Xuất ra các điều khoản của nó vô thời hạn.
  • Cho , xuất ra một n ( số hạng thứ n , 0 hoặc 1 được lập chỉ mục).nmộtnnthứ tự01
  • Cho , đầu ra { a 1 , a 2 , Hoài , a n } ( n điều khoản đầu tiên ).n{a1,a2,,an}n

Bạn có thể cạnh tranh trong bất kỳ ngôn ngữ lập trình nào và có thể nhận đầu vào và cung cấp đầu ra thông qua bất kỳ phương thức tiêu chuẩn nào , trong khi lưu ý rằng các lỗ hổng này bị cấm theo mặc định. Đây là , vì vậy bài nộp ngắn nhất (tính bằng byte) cho mọi ngôn ngữ sẽ thắng.


4
Mẹo để tránh trong khi viết thách thức: Các số nguyên tố . Bạn có thể đã sử dụng một cái gì đó khác hơn là nguyên thủy.
Okx

3
@Okx tôi đã có một vài lý do trong tâm trí khi tôi chọn tính nguyên thời gian này: 1) Có một số thuật toán thông minh là đặc trưng cho trình tự này rất, giống như một Dennis thực hiện 2) Đã có một mục OEIS cho điều này
ông Xcoder

Câu trả lời:


4

Brachylog , 13 byte

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

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

Đầu ra là danh sách các số hạng n đầu tiên của chuỗi.

?~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

Thạch , 11 9 byte

0Ḥ_ÆnɗСI

Đây là một chương trình đầy đủ lấy n làm đối số và in ra các điều khoản n đầu tiên của chuỗi.

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

Làm thế nào nó hoạt động

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 byte

2λλOD₁+ÅNα

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

Điều này chỉ hoạt động trong phiên bản không kế thừa, Elixir viết lại. Xuất ra một dòng số nguyên vô hạn. Có một số lỗi với bài kiểm tra chính đã được sửa trong các cam kết mới nhất, nhưng vẫn chưa có trên TIO. Nó làm việc tại địa phương, mặc dù.Đây là một GIF thực thi trên máy của tôi, được sửa đổi để xuất ra một vài điều khoản đầu tiên thay vì toàn bộ luồng.

Làm thế nào nó hoạt động

2λa(n)a(0)2

λO

λ[a(0),a(1),,một(n-1)]O

D₁+

một(n-1)

ÅN

Tạo số nguyên tố thấp nhất nghiêm ngặt lớn hơn tổng trên.

α

Cuối cùng, lấy lại sự khác biệt tuyệt đối giữa số nguyên tố được tính ở trên và bản sao đầu tiên của tổng được tính trước đó (tổng của tất cả các lần lặp trước đó).

Luồng sau đó được in ngầm thành STDOUT vô thời hạn.


2

Perl 6 , 45 byte

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

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

Trả về một danh sách lười biếng tạo ra chuỗi không có kết thúc.

Giải trình:

Điều này sử dụng toán tử Sequence ...xác định trình tự là:

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

Bình ,12 11 byte

.f&P-;Z=-;Z

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

Đã lưu 1 byte nhờ isaacg.

Tạo các số đầu tiên nnhư vậy, sử dụng chỉ số dựa trên 1.

.ftìm các ksố nguyên đầu tiên thỏa mãn một tiêu chí cụ thể bắt đầu từ số không. Ở đây, tiêu chí là số nguyên tố trước mà chúng ta đã tính ;, cộng với số hiện tại Z, là số nguyên tố ( P). Nếu có, chúng tôi cũng cập nhật số nguyên tố tính toán cuối cùng bằng cách sử dụng hành vi ngắn mạch của logic và hàm ( &). Thật không may .f, biến mặc định là Zchi phí một byte trong bản cập nhật.

Thủ thuật mà isaacg đã tìm ra là lưu trữ sự phủ định của số nguyên tố cuối cùng và kiểm tra giá trị đó trừ đi giá trị hiện tại. Điều này ngắn hơn trong Pyth vì kiểm tra tính nguyên thủy bị quá tải: trên các số dương, nó tìm thấy hệ số nguyên tố trong khi trên các số âm, nó xác định xem giá trị dương của số đó có phải là số nguyên tố hay không.

Điều này ít nhiều chuyển thành:

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

Thay thế _+với -+với -cho -1 byte.
isaacg

@isaacg Điều đó khá thông minh! Tôi sẽ chỉnh sửa nó trong.
FryAmTheEggman

2

MATL , 21 byte

O2hGq:"t0)yd0)+_Yqh]d

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

Đầu ra là n điều khoản đầu tiên của chuỗi.

Giải trình:

Xây dựng một danh sách các số nguyên tố (có 0 ban đầu) và ở cuối tìm thấy trả về sự khác biệt giữa các số nguyên tố liên tiếp trong danh sách.

              % 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

Haskell , 67 byte

(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

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

(1#1)2 2là một hàm không có đầu vào và đầu ra một danh sách vô hạn.


câu trả lời cũ:

Haskell , 88 83 78 76 byte

Bài kiểm tra tính nguyên thủy là từ câu trả lời này và được cải thiện bởi Christian Sievers (-2 byte).

-5 byte nhờ WW .

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

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


Bạn có thể làm mà không cần ^2. Điều đó sẽ thay đổi vị từ từ kiểm tra là số nguyên tố sang kiểm tra là số nguyên tố hoặc số 4 , điều này không quan trọng trong ứng dụng này.
Christian Sievers

2

05AB1E (di sản) , 12 byte

0U[XN+DpiN,U

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

Giải trình

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

Có một vài giải pháp 12 byte khác nhau có thể.
Giá trị đặc biệt này có thể là 10 byte nếu chúng ta có một biến có thể sử dụng được khởi tạo là 0 (thay vì 1 và 2).



1

Python 2 , 99 98 byte

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

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

1 byte thx cho ông Xcoder .


1
Tôi biết ... Tôi biết ... Tôi và nhà sư phạm bitwise của tôi :) Nhưng bạn có thể lưu một byte với k=s-~v.
Ông Xcoder

@Ông. Xcoder: Phép thuật bitwise không linh hoạt của bạn sẽ là kết thúc của bạn! :)
Chas Brown

1

Haskell , 101 99 97 byte

Hàm lkhông có đối số và trả về một danh sách vô hạn. Không ngắn như cách tiếp cận trực tiếp hơn của @ovs (và rõ ràng tôi đã đánh cắp một số phần tạo thành câu trả lời của họ), nhưng có lẽ vẫn có thể chơi được?

Cảm ơn @ H.PWiz cho -2 byte!

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]

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


1

Python 2 , 82 80 byte

s=p=2
i=input()
P=n=1
while i:
 P*=n;n+=1
 if P%n>0<n-s-p:p=n-s;s=n;i-=1
print p

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

Điều này xuất ra số thứ n của chuỗi (dựa trên 0). Bằng cách di chuyển printtrong vòng lặp, điều này có thể được sửa đổi để xuất ra các nmục đầu tiên ở cùng một phụ bản: Hãy thử trực tuyến!



0

Japt, 17 byte

Xuất ra nthuật ngữ thứ 0, được lập chỉ mục 0.

@_+T j}aXÄT±X}g2ì

Thử nó

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.