มันเริ่มยากขึ้นและยากที่จะคอมโพสิตในวันนี้


14

กำหนดรายชื่อผู้ที่ไม่ว่างเปล่าLของจำนวนเต็มมากกว่า1เรากำหนดd (L)เป็นจำนวนเต็มบวกที่เล็กที่สุดเช่นที่n + D (L)เป็นคอมโพสิตสำหรับแต่ละnในL

เรากำหนดลำดับa nเป็น:

  • a 0 = 2
  • i + 1หมายเลขที่เล็กที่สุดกว่าฉันดังกล่าวว่าd (ก0 ... ที่ฉันเป็นi + 1 )> d (ก0 ... เป็นฉัน )

งานของคุณ

คุณอาจจะ:

  • รับจำนวนเต็มNและส่งคืนค่าN-thของลำดับ (0-indexed หรือ 1-indexed)
  • รับจำนวนเต็มNและส่งคืนเงื่อนไขNแรกของลำดับ
  • ไม่มีการป้อนข้อมูลและพิมพ์ลำดับตลอดไป

นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ!

มันก็โอเคถ้าโค้ดของคุณช้าลงเนื่องจากNมีขนาดใหญ่ขึ้น แต่อย่างน้อยมันควรจะหา 20 เทอมแรกในเวลาน้อยกว่า 2 นาที

เทอมแรก

  • 0 = 2และD (2) = 2 (เราจำเป็นต้องเพิ่ม 2 เพื่อให้ 2 + 2 เป็นคอมโพสิต)
  • a 1 = 3เพราะd (2, 3) = 6 (เราต้องบวก 6 เพื่อให้ 2 + 6 และ 3 + 6 ประกอบกัน)
  • a 2 = 5เพราะd (2, 3, 5) = 7 (เราจำเป็นต้องเพิ่ม 7 ดังนั้น 2 +7, 3 + 7 และ 5 + 7 เป็นคอมโพสิตทั้งหมด) ในขณะที่d (2, 3, 4)ยังคงอยู่ เท่ากับ6
  • เป็นต้น

ด้านล่างนี้คือ 100 ลำดับแรกของลำดับ (ไม่ทราบใน OEIS ในขณะที่ทำการโพสต์)

  2,   3,   5,   6,  10,  15,  17,  19,  22,  24,
 30,  34,  35,  39,  41,  47,  51,  54,  56,  57,
 70,  79,  80,  82,  92,  98, 100, 103, 106, 111,
113, 116, 135, 151, 158, 162, 165, 179, 183, 186,
191, 192, 200, 210, 217, 223, 226, 228, 235, 240,
243, 260, 266, 274, 277, 284, 285, 289, 298, 307,
309, 317, 318, 329, 341, 349, 356, 361, 374, 377,
378, 382, 386, 394, 397, 405, 409, 414, 417, 425,
443, 454, 473, 492, 494, 502, 512, 514, 519, 527,
528, 560, 572, 577, 579, 598, 605, 621, 632, 642

คำตอบ:


1

Pyth, 24 ไบต์

Pu+GfP_+Tf!fP_+ZYG)eGQ]2

สาธิต

โดยทั่วไปเราเริ่มต้นด้วย[2]จากนั้นเพิ่มองค์ประกอบที่ 1 ในแต่ละครั้งโดยการค้นหาสลับกันdแล้วเพิ่มองค์ประกอบและอื่น ๆ ส่งออกnองค์ประกอบแรกของลำดับ

มีตัวกรองภายในตัวกรองจำนวนเต็มแรกภายในตัวกรองจำนวนเต็มแรกภายในลูปนำไปใช้ซ้ำ ๆ

คำอธิบาย:

Pu+GfP_+Tf!fP_+ZYG)eGQ]2
 u                   Q]2    Starting with `[2]`, do the following as many times
                            as the input
         f        )         Starting from 1 and counting upward, find d where
          !f     G          None of the elements in the current list
            P_+ZY           plus d give a prime.
    f              eG       Starting from the end of the current list and counting
                            upward, find the first number which
     P_+T                   plus d gives a prime.
  +G                        Append the new number to the current list
P                           Trim the last element of the list

เห็นได้ชัดว่ามีความพยายามซ้ำ ๆ กันระหว่างการโทร "เพิ่มและตรวจสอบว่าดีที่สุด" หรือไม่ แต่ฉันไม่แน่ใจว่าจะกำจัดได้อย่างไร



1

เรติน่า 74 ไบต์

K`__;
"$+"{/;(?!(__+)\1+\b)/+`;
;_
.+$
$&¶$&
)/;(__+)\1+$/+`.+$
_$&_
%`\G_

ลองออนไลน์! 0 การจัดทำดัชนี คำอธิบาย:

K`__;

แต่ละบรรทัดในพื้นที่ทำงานมีสองค่าเอก,i aᵢ;d+aᵢเราเริ่มต้นด้วยa₀=2และd+a₀=0(เพราะมันเป็นนักกอล์ฟ)

"$+"{
...
)

ทำซ้ำลูปNไทม์

/;(?!(__+)\1+\b)/+`

ทำซ้ำในขณะที่มีหมายเลขที่ไม่ใช่ตัวเลขอย่างน้อยหนึ่งหมายเลข

;
;_

dการเพิ่มขึ้น

.+$
$&¶$&

ซ้ำบรรทัดสุดท้ายคัดลอกไปaᵢ₋₁aᵢ

/;(__+)\1+$/+`

ทำซ้ำขณะd+aᵢคอมโพสิต

.+$
_$&_

aᵢการเพิ่มขึ้น

%`\G_

แปลงผลลัพธ์เป็นทศนิยม


1

ทำความสะอาด , 138 130 128 ไบต์

import StdEnv
$l=until(\v=all(\n=any((<)1o gcd(n+v))[2..n+v-1])l)inc 1

map hd(iterate(\l=hd[[n:l]\\n<-[hd l..]| $[n:l]> $l])[2])

ลองออนไลน์!

ขยาย:

$l=until(\v=all(\n=any((<)1o gcd(n+v))[2..n+v-1])l)inc 1
$l=until(                                         )inc 1  // first value from 1 upwards where _
         \v=all(                                )l        // _ is true for everything in l
                \n=any(              )[2..n+v-1]          // any of [2,3..n+v-1] match _
                             gcd(n+v)                     // the gcd of (n+v) and ^
                           o                              // (composed) ^ is _
                       (<)1                               // greater than 1

map hd(iterate(\l=hd[[n:l]\\n<-[hd l..]| $[n:l]> $l])[2]) 
map hd(                                                 ) // the first element of each list in _
       iterate(                                     )[2]  // infinite repeated application of _ to [2]
               \l=hd[                              ]      // the head of _
                     [n:l]                                // n prepended to l
                          \\n<-[hd l..]                   // for every integer n greater than the head of l
                                       | $[n:l]> $l       // where d(n0..ni+1) > d(n0..ni)

1

Julia 0.6 , 145 130 bytes

~L=(x=1;while any(map(m->all(m%i>0 for i=2:m-1),L+x));x+=1;end;x)
!n=n<1?[2]:(P=!(n-1);t=P[end]+1;while ~[P;t]<=~P;t+=1;end;[P;t])

ลองออนไลน์!

(-15 ไบต์โดยใช้ทักษะการเล่นกอล์ฟที่ได้รับการพัฒนาและปรับปรุงใหม่ของฉัน - ผู้ปฏิบัติงานโอเวอร์โหลด, แทนที่เงื่อนไขแบบที่สามและด้วยการลบreturnคำหลัก)

ขยายแล้ว :

function primecheck(m)
    all(m%i>0 for i2:m-1)
end

function d(L)
    x = 1
    while any(map(primecheck, L+x))
        x += 1
    end
    return x
end

function a(n)
    n > 0 || return [2]
    Prev = a(n-1)
    term = Prev[end] + 1
    while d([Prev;term])  d(Prev)
        term += 1
    end
    return [Prev;term]
end
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.