ผลิตภัณฑ์ของช่วงเวลาที่ต่อเนื่องกัน


11

เมื่อถึงเวลาที่ส่งไปยัง sandbox ฉันมีชื่อเสียง 17017 ซึ่งคุณจะสามารถแยกตัวประกอบเป็น 7 × 11 × 13 × 17 ซึ่งเป็นผลคูณของ 4 ช่วงเวลาติดต่อกัน

nกรุณาเขียนฟังก์ชั่นหรือโปรแกรมการส่งออกผลิตภัณฑ์ทั้งหมดของสองคนหรือช่วงเวลาติดต่อกันมากขึ้นถึงจำนวนเต็มการป้อนข้อมูล ตัวอย่างเช่นหากn=143คุณควรส่งออก6, 15, 30, 35, 77, 105, 143(หรือรูปแบบผลลัพธ์ที่เทียบเท่า)

มีข้อ จำกัด ตามปกติสำหรับ I / O และช่องโหว่

นี่คือดังนั้นโปรแกรมที่สั้นที่สุดชนะ



2
ควรเรียงลำดับผลลัพธ์หรือไม่?
ทำให้เสียชีวิต

@ สรุปว่าฉันหมายถึงว่าจะเรียงลำดับ แต่ฉันเห็นว่าฉันไม่ได้ระบุไว้อย่างดีพอและมีคำตอบหลายคำที่ไม่ส่งรายการเรียงลำดับ
Neil

คำตอบ:


6

เจลลี่ , 14 10 ไบต์

(ไม่ต้องสงสัยเลยว่าการเล่นกอล์ฟต้องทำที่นี่! - อ๋อ ... )
-4 ไบต์ขอบคุณ @Dennis - แทนที่การตรวจสอบมากกว่า n โดยใช้ช่วง

ÆRẆP€ḟÆRfR

หมายเหตุ - นี่เป็นทั้งที่ไม่มีประสิทธิภาพมากและผลลัพธ์จะไม่ได้เรียง

ทดสอบที่TryItOnline

อย่างไร?

ÆRẆP€ḟÆRfR - main link takes an argument, n
ÆR    ÆR   - primes up to n
  Ẇ        - all sublists
   P€      - product for each
     ḟ     - filter out the primes (since the sublists include those of lnegth 1)
        fR - filter out any not in range [1,N]
             (yep, it's calculating all products of primes up to n - gross)

2
คุณไม่ต้องการµและ³; >Ðḟทำงานได้ดีด้วยตัวเอง fRสั้นกว่า
Dennis

@Dennis - ฉันรอวิธีที่เหนือกว่าของคุณ ขอบคุณ!
Jonathan Allan

4

MATL , 25 20 ไบต์

Zq&Xf"@gnq?2MpG>~?6M

วิธีการคล้ายกับว่าในคำตอบของโจนาธานอัลลัน

ลองออนไลน์!


รุ่นเก่า 25 ไบต์

:YF!"@2<@sq0@0hhdz2=v?X@D

สิ่งนี้ได้รับเลขชี้กำลังของการสลายตัวปัจจัยหลักสำหรับตัวเลขทั้งหมดจาก1ไปยังอินพุต ตรวจสอบแต่ละรายการ:

  1. หากเลขชี้กำลังทั้งหมดน้อยกว่า 2
  2. หากผลรวมของเลขชี้กำลังทั้งหมดมากกว่า 1
  3. อาร์เรย์ของเลขชี้กำลังถูกขยายด้วยศูนย์เพิ่มเติมที่ปลายแต่ละด้าน ความแตกต่างติดต่อกันของอาร์เรย์ที่ขยายเพิ่มจะถูกคำนวณ ควรมีความแตกต่างที่ไม่ใช่ศูนย์ 2 อย่างแน่นอน

หากทำตามเงื่อนไขสามข้อแล้วตัวเลขจะปรากฏขึ้น ผลลัพธ์อยู่ในลำดับที่เพิ่มขึ้น


4

Javascript (ES6), 105 104 ไบต์

n=>{for(i=1,P=[];i++<n;P[P.every(v=>i%v)?i:n]=i);P.map(i=>P.map(j=>j>i&&(p*=j)<=n&&console.log(p),p=i))}

การสาธิต

var f =
n=>{for(i=1,P=[];i++<n;P[P.every(v=>i%v)?i:n]=i);P.map(i=>P.map(j=>j>i&&(p*=j)<=n&&console.log(p),p=i))}

f(143)



1

Pyth, 18 ไบต์

f}PTftlY.:fP_YSQ)S

โปรแกรมที่รับอินพุตของจำนวนเต็มบน STDIN และพิมพ์รายการจำนวนเต็ม

ลองออนไลน์

มันทำงานอย่างไร

f}PTftlY.:fP_YSQ)S  Program. Input: Q
              SQ    Yield [1, 2, 3, ..., Q]
          fP_Y      Filter that by primality
        .:      )   Yield all sublists of that
    f               Filter the sublists by:
      lY             Length
     t               -1
                    removing sublists of length 1
f                S  Filter [1, 2, 3, ..., Q] (implicit input fill) by:
  PT                 Prime factorisation
 }                   is in the sublists
                    Implicitly print

1

เยลลี่ 11 ไบต์

ÆfÆCI=1Ȧµ€T

ไม่ใช่คำตอบของเยลลี่ที่สั้นที่สุด แต่วิธีนี้ค่อนข้างมีประสิทธิภาพและเรียงลำดับผลลัพธ์

ลองออนไลน์!

มันทำงานอย่างไร

ÆfÆCI=1Ȧµ€T  Main link. Argument: n

        µ€   Map the preceding chain over each k in [1, ..., n].
Æf             Compute all prime factors of k, with multiplicities.
  ÆC           Count the number of primes less than or equal to each prime factor.
               This maps the j-th to j.
    I          Increments; compute the forward differences of consecutive indices.
     =1        Compare each difference with 1.
       Ȧ       All; return 1 iff the array is non-empty and has no zeroes.
          T  Truth; yield all indices for which the chain returned 1.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.