Điều khoản của chuỗi EKG


13

Giới thiệu

Chuỗi EKG bắt đầu bằng 1 và 2, sau đó quy tắc là thuật ngữ tiếp theo là số nguyên dương nhỏ nhất chưa có trong chuỗi và có hệ số chung với số hạng cuối cùng lớn hơn 1 (chúng không phải là số nguyên).

Các điều khoản đầu tiên là:

1, 2, 4, 6, 3, 9, 12, 8, 10, 5, 15, ...

Nó được gọi là EKG vì biểu đồ các thuật ngữ của nó khá giống với EKG.

Đó là trình tự A064413 trong OEIS .

Thử thách

Bạn phải viết một hàm lấy số nguyên n làm đầu vào và xuất ra bao nhiêu trong số n số hạng đầu tiên của chuỗi lớn hơn n .

Vì quy tắc của chuỗi bắt đầu bằng số hạng thứ ba, số nguyên đầu vào phải lớn hơn hoặc bằng 3. Ví dụ: đầu vào đã cho, đầu 10ra là 1bởi vì số hạng thứ 7 12và không có thuật ngữ nào trong mười thuật ngữ đầu tiên khác vượt quá 10.

Các trường hợp thử nghiệm

3 -> 1

10 -> 1

100 -> 9

1000 -> 70

Quy tắc

  • Đối với các số nguyên thấp hơn 3, hàm có thể xuất 0 hoặc mã lỗi.
  • Không có quy tắc cụ thể nào khác ngoại trừ: đó là mã golf, càng ngắn càng tốt!

Chúng ta có thể sử dụng lập chỉ mục 0, với 1thuật ngữ 0 của chuỗi và do đó, thực hiện, ví dụ, 15thuật ngữ thứ 10, chứ không phải là 5?
Xù xì

@Shaggy Tôi nghĩ thật công bằng khi sử dụng điều này như một cách toán học, nhưng thực sự nó sẽ thay đổi kết quả của các trường hợp thử nghiệm và thực sự là chính hàm được hỏi. Vì vậy, tôi nghĩ rằng bạn không nên được phép làm như vậy. Lấy làm tiếc.
David

oeis.org/A064413/graph - OEIS có thể viết đồ thị? Khéo léo.
Bạch tuộc ma thuật Urn

Câu trả lời:


7

Thạch , 20 19 18 byte

S‘gṪ’ɗƇḟ¹Ṃṭ
1Ç¡>¹S

Đây là một chương trình đầy đủ.

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

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

1Ç¡>¹S       Main link. Argument: n (integer)

1            Set the return value to 1.
 Ç¡          Call the helper link n times.
   >¹        Compare the elements of the result with n.
     S       Take the sum, counting elements larger than n.


S‘gṪ’ɗƇḟ¹Ṃṭ  Helper link. Argument: A (array or 1)

S            Take the sum of A.
 ‘           Increment; add 1.
     ɗƇ      Drei comb; keep only elements k of [1, ..., sum(A)+1] for which the
             three links to the left return a truthy value.
  g              Take the GCD of k and all elements of A.
   Ṫ             Tail; extract the last GCD.
    ’            Decrement the result, mapping 1 to 0.
       ḟ¹    Filterfalse; remove the elements that occur in A.
         Ṃ   Take the minimum.
          ṭ  Tack; append the minimum to A.

Lưu ý rằng chuỗi được tạo là [1,0,2,4,6,3,9,12,số 8,10,5,15,Giáo dục] . Vì việc gọi liên kết của trình trợ giúp n lần tạo ra một chuỗi có độ dài n+1 , nên thực tế 0 bị bỏ qua.


6

Perl 6 , 66 63 59 58 byte

-4 byte nhờ Jo King

{sum (1,2,{+(1...all *gcd@_[*-1]>1,*∉@_)}...*)[^$_]X>$_}

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

Quá chậm trên TIO cho n = 1000.


@JoKing Sau khi tôi nhận ra rằng first &f,1..*có thể được viết lại +(1...&f), thì trò lừa của bạn đã giúp ích cho bạn.
nwellnhof

4

JavaScript (ES6), 107 106 105 byte

f=(n,a=[2,1],k=3)=>a[n-1]?0:a.indexOf(k)+(C=(a,b)=>b?C(b,a%b):a>1)(k,a[0])?f(n,a,k+1):(k>n)+f(n,[k,...a])

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

Làm sao?

C

C = (a, b) => b ? C(b, a % b) : a > 1

một[2,1]một[0]

k0

a.indexOf(k) + C(k, a[0])

a.indexOf(k) bằng với một trong hai:

  • -1kmột
  • 0k
  • Tôi1

a.indexOf(k) + C(k, a[0])0kmộtk-1+trbạne= =0



4

Husk , 16 byte

#>¹↑¡§ḟȯ←⌋→`-Nḣ2

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

Giải trình

#>¹↑¡§ḟȯ←⌋→`-Nḣ2  Implicit input, say n=10
              ḣ2  Range to 2: [1,2]
    ¡             Construct an infinite list, adding new elements using this function:
                   Argument is list of numbers found so far, say L=[1,2,4]
             N     Natural numbers: [1,2,3,4,5,6,7...
           `-      Remove elements of L: K=[3,5,6,7...
      ḟ            Find first element of K that satisfies this:
                    Argument is a number in K, say 6
     §    →         Last element of L: 4
         ⌋          GCD: 2
       ȯ←           Decrement: 1
                    Implicitly: is it nonzero? Yes, so 6 is good.
                  Result is the EKG sequence: [1,2,4,6,3,9,12...
   ↑              Take the first n elements: [1,2,4,6,3,9,12,8,10,5]
#                 Count the number of those
 >¹               that are larger than n: 1

3

MATL , 29 byte

qq:2:w"GE:yX-y0)yZdqg)1)h]G>z

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

Giải trình:

	#implicit input, n, say 10
qq:	#push 1:8
2:	#push [1 2]. Stack: {[1 .. 8], [1 2]}
w	#swap top two elements on stack
"	#begin for loop (do the following n-2 times):
 GE:	#push 1...20. Stack: {[1 2], [1..20]}
 y	#copy from below. Stack:{[1 2], [1..20], [1 2]}
 X-	#set difference. Stack: {[1 2], [3..20]}
 y0)	#copy last element from below. Stack:{[1 2], [3..20], 2}
 yZd	#copy from below and elementwise GCD. Stack:{[1 2], [3..20],[1,2,etc.]}
 qg)	#select those with gcd greater than 1. Stack:{[1 2], [4,6,etc.]}
 1)	#take first. Stack:{[1 2], 4}
 h	#horizontally concatenate. Stack:{[1 2 4]}
 ]	#end of for loop
G>z	#count those greater than input
	#implicit output of result

xin vui lòng giải thích tại sao bạn tăng gấp đôi đầu vào (với GE:)?
David

2
một(n)2nmột(n)n2n= =1000while

3

APL (Dyalog Unicode) , 39 byte SBCS

-2 byte nhờ ngn, -1 byte bằng cách sử dụng kiểm tra điều kiện thích hợp.

{+/⍵<⍵⍴3{(1=⍺∨⊃⌽⍵)∨⍺∊⍵:⍵∇⍨⍺+1⋄⍵,⍺}⍣⍵⍳2}

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


chuyển đối số bên trái của nó cho hàm toán hạng, do đó không cần . Ngoài ra, sẽ không liên kết với thứ bên phải vì nó bắt đầu bằng hàm ( ), vì vậy không cần .
ngn

2

JavaScript, 93 91 87 byte

Ném một lỗi tràn cho 0hoặc 1, đầu ra 0cho 2.

n=>(g=x=>n-i?g[++x]|(h=(y,z)=>z?h(z,y%z):y)(x,c)<2?g(x):(g[c=x]=++i,x>n)+g(2):0)(i=c=2)

Dùng thử trực tuyến


2

APL (NARS), ký tự 121, byte 242

∇r←a w;i;j;v
r←w⋄→0×⍳w≤2⋄i←2⋄r←⍳2⋄v←1,1,(2×w)⍴0
j←¯1+v⍳0
j+←1⋄→3×⍳1=j⊃v⋄→3×⍳∼1<j∨i⊃r⋄r←r,j⋄i+←1⋄v[j]←1⋄→2×⍳w>i
r←+/w<r
∇

kiểm tra trong ít hơn một phút ở đây trong thời gian chạy:

  a¨3 10 100 1000 2000
1 1 9 70 128 

Tự nhiên không có kiểm tra loại và phạm vi ...


1

Japt, 23 21 byte

@_jX ªAøZ}f}gA=ì)Aè>U

Thử nó

@_jX ªAøZ}f}gA=ì)Aè>U
                          :Implicit input of integer U
             A            :10
               ì          :Digit array
              =           :Reassign to A
@          }g             :While the length of A < U+1, take the last element as X,
                          :pass it through the following function & push the result to A
 _       }f               :  Find the first integer Z >= 0 that returns falsey
  jX                      :    Is Z co-prime with X?
     ª                    :    OR
      AøZ                 :    Does A contain Z?
                )         :End loop
                 Aè>U     :Count the elements in A that are greater than U

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.