ประมาณสัดส่วนของจำนวนเต็มกับปัจจัยข้างเคียง


11

ถ้า 1 ไม่นับเป็นปัจจัยแล้ว

  • 40 มีสองปัจจัยที่อยู่ใกล้เคียง (4 และ 5)
  • 1,092 มีสองปัจจัยที่อยู่ใกล้เคียง (13 และ 14)
  • 350 ไม่มีปัจจัยข้างเคียงสองตัว (จากปัจจัย 2, 5, 7, 10, 14, 25, 35, 50, 70, และ 175, ไม่มีสองติดต่อกัน)

สัดส่วนของจำนวนเต็มบวกที่มีคุณสมบัตินี้คือสัดส่วนที่หารด้วย 6 (2 × 3), 12 (3 × 4), 20 (4 × 5), 30, 56, … หากเราคำนวณเพียงสัดส่วนที่หารได้ด้วยnแรกของเหล่านี้เราจะได้ค่าประมาณที่แม่นยำยิ่งขึ้นเมื่อnเพิ่มขึ้น

ตัวอย่างเช่นสำหรับn = 1เราจะพบสัดส่วนของจำนวนเต็มหารด้วย 2 × 3 = 6 ซึ่งก็คือ 1/6 สำหรับn = 2จำนวนเต็มทั้งหมดหารด้วย 3 × 4 = 12 จะหารด้วย 6 ดังนั้นการประมาณยังเป็น 1/6 สำหรับn = 3สัดส่วนของจำนวนเต็มหารด้วย 6 หรือ 20 คือ 1/5 และต่อไป

นี่คือค่าแรก ๆ :

1  1/6                0.16666666666666666
3  1/5                0.20000000000000000
6  22/105             0.20952380952380953
9  491/2310           0.21255411255411255
12 2153/10010         0.21508491508491510
15 36887/170170       0.21676558735382265
21 65563/301070       0.21776663234463747
24 853883/3913910     0.21816623274423785
27 24796879/113503390 0.21846817967287144

สำหรับค่าของnระหว่างค่าที่กำหนดเอาท์พุทควรเป็นค่าเดียวกันกับเอาต์พุตสำหรับค่าด้านบน (เช่นn = 5 → 1/5)

โปรแกรมของคุณควรรับnและเอาต์พุตทั้งคำตอบเศษส่วนหรือทศนิยม คุณสามารถใช้nในการชดเชยใด ๆ (เช่น 0 การจัดทำดัชนีหรือ 2 การจัดทำดัชนีในลำดับนี้แทนการจัดทำดัชนี 1)

สำหรับเอาต์พุตทศนิยมโปรแกรมของคุณต้องแม่นยำอย่างน้อย 5 หลักสำหรับทุกกรณีทดสอบที่ให้

การให้คะแนนเป็นโดยมีรหัสที่สั้นที่สุดชนะ

แรงบันดาลใจจากสิ่งที่สัดส่วนของจำนวนเต็มบวกมีสองปัจจัยที่แตกต่างกัน 1? โดยMarty Cohen - โดยเฉพาะโดยคำตอบของDan


1
คำตอบทศนิยมต้องแม่นยำแค่ไหน กลยุทธ์ธรรมชาติดูเหมือนว่าจะนับจำนวนเต็มด้วยตัวหารที่ถูกต้องในช่วงที่กว้างใหญ่และหารด้วยความยาวของช่วงซึ่งจะดีขึ้นเมื่อการประมาณเป็นช่วงที่ใหญ่ขึ้น
xnor

@xnor ตอนนี้ฉันได้ระบุไว้ในโพสต์
Doorknob

คำตอบ:


6

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

-1 ใช้ความคิดของ Erik the Outgolfer เพื่อหาค่าเฉลี่ยของรายการศูนย์และรายการ
-3 โดยใช้การจัดทำดัชนี 3 แบบ (ตามที่อนุญาตในคำถาม) - ขอบคุณ Dennis ที่ชี้เรื่องนี้

ḊPƝḍⱮ!Ẹ€Æm

Monadic Link ยอมรับจำนวนเต็มn+2ซึ่งให้ผลลอย

[2,(n+2)!]

(เริ่มต้นจาก+2µḊPƝḍⱮ!§T,$Ẉการรับnและการยอม[numerator, denominator]ลดลง)

อย่างไร?

ḊPƝḍⱮ!Ẹ€Æm - Link: integer, x=n+2
Ḋ          - dequeue (implicit range of) x  - i.e. [2,3,4,...,n+2]
  Ɲ        - apply to neighbours:
 P         -   product                             [2×3,3×4,...,(n+1)×(n+2)]
     !     - factorial of x                        x!
    Ɱ      - map across (implicit range of) x! with:
   ḍ       -   divides?                            [[2×3ḍ1,3×4ḍ1,...,(n+1)×(n+2)ḍ1],[2×3ḍ2,3×4ḍ2,...,(n+1)×(n+2)ḍ2],...,[2×3ḍ(x!),3×4ḍ(x!),...,(n+1)×(n+2)ḍ(x!)]]
       €   - for each:
      Ẹ    -   any?  (1 if divisible by any of the neighbour products else 0)
        Æm - mean

หืม ... ฉันสงสัยว่าสิ่งที่ทำให้สั้นกว่าของฉันนี้คือการใช้!แทนæl/... อ่าความสุขของการเปลี่ยนแปลงกฎขณะหลับ
Erik the Outgolfer

@EriktheOutgolfer ใช่วิธีการที่คล้ายกันมากเมื่อฉันมองใกล้! คุณสามารถใช้Pเพื่อลงไป 13?
Jonathan Allan

แทนที่จะเป็นẸ€? ฉันกลัวPเหมือนกัน׃1$ดังนั้นมันจะไม่ทำงาน (และนั่นก็คือ 14 อย่างไรก็ตาม ... ) ถ้าแทนæl/อาจP เป็น ( คือ LCM * k หลังจากทั้งหมด)
Erik the Outgolfer

@EriktheOutgolfer แทนæl/
Jonathan Allan

ใช่ฉันคิดว่าฉันสามารถทำเช่นนั้นได้และผลลัพธ์จะแม่นยำตามหลักวิชาการเหมือนกับที่æl/ฉันเดา (การเล่นกอล์ฟตอนกลางคืนนกฮูกมีปัญหา ... ) แก้ไข: ใช่แม้ว่าฉันจะต้องลดการโต้เถียง TIO ถึง4... : P
Erik the Outgolfer

3

05AB1E , 15 ไบต์

Ì©!Lε®LüP¦Öà}ÅA

พอร์ตของ@JonathanAllan 's Jelly ตอบดังนั้นช้ามากเช่นกัน

ลองออนไลน์หรือตรวจสอบสามกรณีทดสอบแรก

คำอธิบาย:

Ì                 # Add 2 to the (implicit) input
                  #  i.e. 3 → 5
 ©                # Store this in the register (without popping)
  !               # Take the factorial of it
                  #  i.e. 5 → 120
   L              # Create a list in the range [1, (input+2)!]
                  #   i.e. 120 → [1,2,3,...,118,119,120]
    ε       }     #  Map over each value in this list
     ®            #  Push the input+2 from the register
      L           #  Create a list in the range [1, input+2]
                  #   i.e. 5 → [1,2,3,4,5]
       ü          #  Take each pair
                  #    i.e. [1,2,3,4,5] → [[1,2],[2,3],[3,4],[4,5]]
        P         #   And take the product of that pair
                  #    i.e. [[1,2],[2,3],[3,4],[4,5]] → [2,6,12,20]
         ¦        #  Then remove the first value from this product-pair list
                  #   i.e. [2,6,12,20] → [6,12,20]
          Ö       #  Check for each product-pair if it divides the current map-value
                  #  (1 if truthy; 0 if falsey)
                  #   i.e. [1,2,3,...,118,119,120] and [6,12,20]
                  #    → [[0,0,0],[0,0,0],[0,0,0],...,[0,0,0],[0,0,0],[1,1,1]]
           à      #  And check if it's truthy for any by taking the maximum
                  #   i.e. [[0,0,0],[0,0,0],[0,0,0],...,[0,0,0],[0,0,0],[1,1,1]]
                  #    → [0,0,0,...,0,0,1]
             ÅA   # After the map, take the mean (and output implicitly)
                  #  i.e. [0,0,0,...,0,0,1] → 0.2

3

JavaScript (ES6),  94 92  90 ไบต์

บันทึก 2 ไบต์ขอบคุณ @Shaggy และอีก 2 ไบต์จากที่นั่น

ส่งคืนการประมาณทศนิยม

n=>(x=2,g=a=>n--?g([...a,x*++x]):[...Array(1e6)].map((_,k)=>n+=a.some(d=>k%d<1))&&n/1e6)``

ลองออนไลน์!


JavaScript (ES6), 131 ไบต์

[nยูม.อีRaเสื้อโอR,dอีnโอม.ผมnaเสื้อโอR]

f=(n,a=[],p=x=1)=>n?f(n-1,[...a,q=++x*-~x],p*q/(g=(a,b)=>a?g(b%a,a):b)(p,q)):[...Array(p)].map((_,k)=>n+=a.some(d=>-~k%d<1))&&[n,p]

ลองออนไลน์!



นี้ควรจะทำงานในทฤษฎี 82 ไบต์
Shaggy

@Shaggy ฉันไม่รู้จริง ๆ ว่ามติเป็นเช่นไร ในขณะที่มันใช้งานได้ในทางทฤษฎีมันไม่ได้ทำงานในทางปฏิบัติสำหรับการป้อนข้อมูลใด ๆ (โดยส่วนตัวแล้วฉันไม่ชอบคำตอบแบบนี้นี่คือเหตุผลที่ฉันมักจะรวมกฎเช่น "อย่างน้อยโค้ดของคุณควรทำงานได้ถึงขีด จำกัด ที่กำหนด" ในความท้าทายของฉันเองเมื่อฉันสงสัยว่าฉันจะได้รับคำตอบเช่น"ทำงานเท่านั้น สำหรับ n = 1 บน TIO " ... หรือไม่ทำงานเลยในกรณีปัจจุบัน)
Arnauld

โดยส่วนตัวแล้วฉันเป็นแฟนตัวยงของช่วงเวลาที่ไม่มีที่สิ้นสุดและฉันทามติหน่วยความจำ;)
Shaggy

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

3

เยลลี่ 12 ไบต์

Ḋב$ḍẸ¥ⱮP$Æm

ลองออนไลน์!

-2 ขอบคุณที่โจนาธานอัลลันแนะนำให้เปลี่ยน LCM ด้วยผลิตภัณฑ์ (เช่น LCM คูณด้วยจำนวนเต็ม)

เดนนิสสังเกตเห็นว่าฉันสามารถจัดทำดัชนี 2 ได้เช่นกัน


2

ถ่าน 26 ไบต์

FN⊞υ×⁺²ι⁺³ιI∕LΦΠυ¬⌊Eυ﹪ιλΠυ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด ไม่มีประสิทธิภาพอย่างสิ้นหวัง (O (n! ²)) ดังนั้นใช้งานได้n=4กับ TIO เท่านั้น คำอธิบาย:

FN⊞υ×⁺²ι⁺³ι

ป้อนnและคำนวณnผลิตภัณฑ์แรกของปัจจัยข้างเคียง

I∕LΦΠυ¬⌊Eυ﹪ιλΠυ

นำผลคูณของปัจจัยเหล่านั้นทั้งหมดมาใช้เพื่อคำนวณสัดส่วนของตัวเลขที่มีปัจจัยเหล่านั้นอย่างน้อยหนึ่งตัว

รุ่นที่ช้ากว่า 30 ไบต์น้อยเป็นเพียง O (n!) ดังนั้นสามารถทำได้ถึงn=6TIO:

F⊕N⊞υ⁺²ιI∕LΦΠυΣEυ∧μ¬﹪ι×λ§υ⊖μΠυ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด

รุ่นที่เร็วกว่า 46 ไบต์เป็นเพียง O (lcm (1..n + 2)) ดังนั้นสามารถทำได้ถึงn=10TIO:

FN⊞υ×⁺²ι⁺³ι≔⁰η≔⁰ζW∨¬η⌈Eυ﹪ηκ«≦⊕η≧⁺⌈Eυ¬﹪ηκζ»I∕ζη

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด

รุ่นที่เร็วกว่า 45 ไบต์เป็นเพียง O (2ⁿ) ดังนั้นสามารถทำได้ถึงn=13TIO:

⊞υ±¹FEN×⁺²ι⁺³ιF⮌υ⊞υ±÷×ικ⌈Φ⊕ι∧λ¬∨﹪ιλ﹪κλIΣ∕¹✂υ¹

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด

รุ่นที่เร็วที่สุด 54 ไบต์ใช้ LCM ที่มีประสิทธิภาพยิ่งขึ้นดังนั้นจึงสามารถทำได้ถึงn=18TIO:

⊞υ±¹FEN×⁺²ι⁺³ιFEυ⟦κι⟧«W⊟κ⊞⊞Oκλ﹪§κ±²λ⊞υ±÷Π…κ²⊟κ»IΣ∕¹✂υ¹

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด


2

ภาษา Wolfram (Mathematica) , 69 68 61 52 ไบต์

Count[Range[#!],b_/;Or@@(# #-#&@Range[3,#]∣b)]/#!&

ลองออนไลน์!

3 การจัดทำดัชนี ตอนแรกฉันจะใช้LCM@@แต่รู้ว่า#!มันจะสั้นกว่า ... แต่ตอนนี้มันมีหน่วยความจำมากมายสำหรับRange[#!]...

จัดการเพื่อตีกอล์ฟตามเงื่อนไข 2 ไบต์ซึ่งก็ดี


โซลูชันตัวเลขที่เก่ากว่า (56 ไบต์):

N@Count[Range[5^8],b_/;Or@@Array[(# #-#)∣b&,#,3]]/5^8&

ลองออนไลน์!

2 การจัดทำดัชนี มีประสิทธิภาพมากขึ้นเมื่อ#!>5^8( #>9สมมติว่า#เป็นจำนวนเต็ม)


1

Python 2 , 78 ไบต์

lambda n:sum(any(-~i%(j*-~j)<1for j in range(2,n+2))for i in range(10**7))/1e7

ลองออนไลน์!

ส่งคืนทศนิยมโดยประมาณถึง 5 หลัก ใช้วิธีเดรัจฉานบังคับไร้เดียงสาxnorแนะนำในการแสดงความคิดเห็นในคำถาม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.