เศษส่วนต่อเนื่องของผลรวมหลักของ Square Roots


10

บทนำ

งานของคุณคือการสร้างคำศัพท์ 1,000 คำแรกในการแสดงเศษส่วนต่อเนื่องของผลรวมหลักที่สองของรากที่สองของ 2 และรากที่สองของ 3

กล่าวอีกนัยหนึ่งให้ผลิตรายการต่อไปนี้อย่างแน่นอน (แต่รูปแบบผลลัพธ์มีความยืดหยุ่น)

[2, 6, 1, 5, 7, 2, 4, 4, 1, 11, 68, 17, 1, 19, 5, 6, 1, 5, 3, 2, 1, 2, 3, 21, 1, 2, 1, 2, 2, 9, 8, 1, 1, 1, 1, 6, 2, 1, 4, 1, 1, 2, 3, 7, 1, 4, 1, 7, 1, 1, 4, 22, 1, 1, 3, 1, 2, 1, 1, 1, 7, 2, 7, 2, 1, 3, 14, 1, 4, 1, 1, 1, 15, 1, 91, 3, 1, 1, 1, 8, 6, 1, 1, 1, 1, 3, 1, 2, 58, 1, 8, 1, 5, 2, 5, 2, 1, 1, 7, 2, 3, 3, 22, 5, 3, 3, 1, 9, 1, 2, 2, 1, 7, 5, 2, 3, 10, 2, 3, 3, 4, 94, 211, 3, 2, 173, 2, 1, 2, 1, 14, 4, 1, 11, 6, 1, 4, 1, 1, 62330, 1, 17, 1, 5, 2, 5, 5, 1, 9, 3, 1, 2, 1, 5, 1, 1, 1, 11, 8, 5, 12, 3, 2, 1, 8, 6, 1, 3, 1, 3, 1, 2, 1, 78, 1, 3, 2, 442, 1, 7, 3, 1, 2, 3, 1, 3, 2, 9, 1, 6, 1, 2, 2, 2, 5, 2, 1, 1, 1, 6, 2, 3, 3, 2, 2, 5, 2, 2, 1, 2, 1, 1, 9, 4, 4, 1, 3, 1, 1, 1, 1, 5, 1, 1, 4, 12, 1, 1, 1, 4, 2, 15, 1, 2, 1, 3, 2, 2, 3, 2, 1, 1, 13, 11, 1, 23, 1, 1, 1, 13, 4, 1, 11, 1, 1, 2, 3, 14, 1, 774, 1, 3, 1, 1, 1, 1, 1, 2, 1, 3, 2, 1, 1, 1, 8, 1, 3, 10, 2, 7, 2, 2, 1, 1, 1, 2, 2, 1, 11, 1, 2, 5, 1, 4, 1, 4, 1, 16, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 8, 1, 2, 1, 1, 22, 3, 1, 8, 1, 1, 1, 1, 1, 9, 1, 1, 4, 1, 2, 1, 2, 3, 5, 1, 3, 1, 77, 1, 7, 1, 1, 1, 1, 2, 1, 1, 27, 16, 2, 1, 10, 1, 1, 5, 1, 6, 2, 1, 4, 14, 33, 1, 2, 1, 1, 1, 2, 1, 1, 1, 29, 2, 5, 3, 7, 1, 471, 1, 50, 5, 3, 1, 1, 3, 1, 3, 36, 15, 1, 29, 2, 1, 2, 9, 5, 1, 2, 1, 1, 1, 1, 2, 15, 1, 22, 1, 1, 2, 7, 1, 5, 9, 3, 1, 3, 2, 2, 1, 8, 3, 1, 2, 4, 1, 2, 6, 1, 6, 1, 1, 1, 1, 1, 5, 7, 64, 2, 1, 1, 1, 1, 120, 1, 4, 2, 7, 3, 5, 1, 1, 7, 1, 3, 2, 3, 13, 2, 2, 2, 1, 43, 2, 3, 3, 1, 2, 4, 14, 2, 2, 1, 22, 4, 2, 12, 1, 9, 2, 6, 10, 4, 9, 1, 2, 6, 1, 1, 1, 14, 1, 22, 1, 2, 1, 1, 1, 1, 118, 1, 16, 1, 1, 14, 2, 24, 1, 1, 2, 11, 1, 6, 2, 1, 2, 1, 1, 3, 6, 1, 2, 2, 7, 1, 12, 71, 3, 2, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 3, 5, 5, 1, 1, 1, 1, 4, 1, 1, 1, 3, 1, 4, 2, 19, 1, 16, 2, 15, 1, 1, 3, 2, 3, 2, 4, 1, 3, 1, 1, 7, 1, 2, 2, 117, 2, 2, 8, 2, 1, 5, 1, 3, 12, 1, 10, 1, 4, 1, 1, 2, 1, 5, 2, 33, 1, 1, 1, 1, 1, 18, 1, 1, 1, 4, 236, 1, 11, 4, 1, 1, 11, 13, 1, 1, 5, 1, 3, 2, 2, 3, 3, 7, 1, 2, 8, 5, 14, 1, 1, 2, 6, 7, 1, 1, 6, 14, 22, 8, 38, 4, 6, 1, 1, 1, 1, 7, 1, 1, 20, 2, 28, 4, 1, 1, 4, 2, 2, 1, 1, 2, 3, 1, 13, 1, 2, 5, 1, 4, 1, 3, 1, 1, 2, 408, 1, 29, 1, 6, 67, 1, 6, 251, 1, 2, 1, 1, 1, 8, 13, 1, 1, 1, 15, 1, 16, 23, 12, 1, 3, 5, 20, 16, 4, 2, 1, 8, 1, 2, 2, 6, 1, 2, 4, 1, 9, 1, 7, 1, 1, 1, 64, 10, 1, 1, 2, 1, 8, 2, 1, 5, 4, 2, 5, 6, 7, 1, 2, 1, 2, 2, 1, 4, 11, 1, 1, 4, 1, 714, 6, 3, 10, 2, 1, 6, 36, 1, 1, 1, 1, 10, 2, 1, 1, 1, 3, 2, 1, 6, 1, 8, 1, 1, 1, 1, 1, 1, 1, 2, 40, 1, 1, 1, 5, 1, 3, 24, 2, 1, 6, 2, 1, 1, 1, 7, 5, 2, 1, 2, 1, 6, 1, 1, 9, 1, 2, 7, 6, 2, 1, 1, 1, 2, 1, 12, 1, 20, 7, 3, 1, 10, 1, 8, 1, 3, 1, 1, 1, 1, 2, 1, 1, 6, 1, 2, 1, 5, 1, 1, 1, 5, 12, 1, 2, 1, 2, 1, 2, 1, 1, 3, 1, 1, 1, 8, 2, 4, 1, 3, 1, 1, 1, 2, 1, 11, 3, 2, 1, 7, 18, 1, 1, 17, 1, 1, 7, 4, 6, 2, 5, 6, 4, 4, 2, 1, 6, 20, 1, 45, 5, 6, 1, 1, 3, 2, 3, 3, 19, 1, 1, 1, 1, 1, 1, 34, 1, 1, 3, 2, 1, 1, 1, 1, 1, 4, 1, 2, 1, 312, 2, 1, 1, 1, 3, 6, 6, 1, 2, 25, 14, 281, 4, 1, 37, 582, 3, 20, 2, 1, 1, 1, 2, 1, 3, 7, 8, 4, 1, 11, 2, 3, 183, 2, 23, 8, 72, 2, 2, 3, 8, 7, 1, 4, 1, 4, 1, 2, 2, 1, 2, 1, 8, 2, 4, 1, 2, 1, 2, 1, 1, 2, 1, 1, 10, 2, 1, 1, 5, 2, 1, 1, 1, 2, 1, 1, 2, 1, 3, 2, 9]

ท้าทาย

แนะนำทั่วไปต่อไปนี้เพื่อเศษส่วนต่อเนื่องมาจากความท้าทายลดความซับซ้อนเศษส่วนต่อเนื่อง

เศษส่วนต่อเนื่องเป็นนิพจน์ที่อธิบายเศษส่วนซ้ำ ๆ พวกเขาสามารถแสดงกราฟิก:

เศษส่วนต่อเนื่อง

หรือพวกเขาสามารถแสดงเป็นรายการของค่า: [a0, a1, a2, a3, ... an]

ความท้าทายนี้คือการหาเศษส่วนต่อเนื่องของผลรวมหลักที่ชาญฉลาดของsqrt(2)และผลรวมsqrt(3)ตัวเลขที่ชาญฉลาดถูกกำหนดดังนี้

ใช้ตัวเลขในการแทนทศนิยมของsqrt(2)และsqrt(3)และได้รับผลรวมหลักโดยตัวเลข:

    1.  4  1  4  2  1  3  5  6  2  3 ...
+   1.  7  3  2  0  5  0  8  0  7  5 ...
=   2. 11  4  6  2  6  3 13  6  9  8 ...

จากนั้นเก็บเฉพาะตัวเลขสุดท้ายของผลรวมและรวบรวมกลับเป็นตัวเลขทศนิยมของจำนวนจริง

    1.  4  1  4  2  1  3  5  6  2  3 ...
+   1.  7  3  2  0  5  0  8  0  7  5 ...
=   2. 11  4  6  2  6  3 13  6  9  8 ...
->  2.  1  4  6  2  6  3  3  6  9  8 ...

ผลรวมหลักที่ชาญฉลาดของsqrt(2)และsqrt(3)เป็นดังนั้น2.1462633698...และเมื่อมันแสดงด้วยเศษส่วนต่อเนื่อง 1,000 ค่าแรก (เช่นถึง) ที่ได้รับคือรายการที่อยู่ในส่วนบทนำa0a999

รายละเอียด

  • คุณสามารถเขียนฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบ ไม่ควรรับอินพุต กล่าวอีกนัยหนึ่งฟังก์ชันหรือโปรแกรมควรทำงานอย่างถูกต้องโดยไม่มีอินพุต ไม่สำคัญว่าฟังก์ชั่นหรือโปรแกรมจะทำอะไรถ้ามีการป้อนข้อมูลที่ไม่ว่างเปล่า

  • คุณควรส่งออกไปยัง STDOUT เฉพาะในกรณีที่ภาษาของคุณไม่สนับสนุนการแสดงผลไปยัง STDOUT หากคุณใช้ภาษาที่ใกล้เคียงที่สุด

  • คุณไม่จำเป็นต้องรักษาความสะอาดของ STDERR และอนุญาตให้โปรแกรมหยุดทำงานโดยมีข้อผิดพลาดตราบใดที่เอาต์พุตที่ต้องการทำใน STDOUT หรือเทียบเท่า

  • คุณสามารถให้ออกผ่านรูปแบบมาตรฐานใด

  • นี่คือจำนวนไบต์ต่ำสุดชนะ

  • ตามปกติช่องโหว่เริ่มต้นจะมีผลที่นี่

คำตอบ:


2

สคริปต์ Kotlin 1.1 , 304 293 ไบต์

import java.math.BigDecimal as b
import java.math.*
val m=MathContext(1022)
var B=b(2)
var A=b((""+B.sqrt(m)).zip(""+b(3).sqrt(m)).joinToString(""){(a,b)->if(a=='.')".";else ""+(a-'0'+(b-'0'))%10})
val g=b(1).setScale(1022)
repeat(1000){println(B);A=g/(A-B);B=A.setScale(0,RoundingMode.FLOOR)}

น่าเสียดายเล็กน้อย: /

ต้องรันด้วย JDK 9 ตามที่sqrtเพิ่มไว้BigDecimalในรีลีสนี้ น่าสนใจฉันไม่พบไซต์ TIO ที่มีทั้งคุณสมบัติ Kotlin 1.1 และ JDK 9 (Ideone และ repl.it ทั้งคู่รัน Kotlin 1.0 ซึ่งไม่สนับสนุนการทำลายในแลมบ์ดาและ TIO บ่นว่าsqrtไม่มีอยู่)

พิมพ์แต่ละองค์ประกอบคั่นด้วยขึ้นบรรทัดใหม่

แก้ไข ( -11): ย้ายprintlnไปที่จุดเริ่มต้นของเนื้อความลูปและเพิ่มการวนซ้ำเพิ่มเติมเพื่อหลีกเลี่ยงการเรียกเมธอดซ้ำ ทำการคำนวณพิเศษเสร็จแล้ว แต่ไม่ได้ใช้เพื่ออะไร


2

Python 2 , 193 ... 179 178 ไบต์

d=10
u=d**2000
v=u*u
def s(n,a=d,i=9):
 while a-i:i,a=a,(a+n/a)/2
 return a
p,q,r,t=s(2*v),s(3*v),1,0
while p:t+=(p+q)%d*r;p/=d;q/=d;r*=d
for i in range(1000):print t/u;t=v/(t%u)

ลองออนไลน์!

การคำนวณsqrt(2)และsqrt(3)ความแม่นยำด้วยรหัสย่อนั้นเป็นงานที่ยากลำบากใน Python และภาษาอื่น ๆ

จำเป็นต้องมี 2000 หลักเพื่อให้แน่ใจว่าการขยายนั้นถูกต้อง (1,020 พอเพียง แต่ฉันจะไม่แก้ไขเพราะไม่มีการปรับปรุง) และบรรทัด 4-6 คือรากที่สองของจำนวนเต็ม

193> 180: ผลรวมโมดูโลที่ฉลาดหลักจะถูกดำเนินการโดยวงแทนการจัดการอาร์เรย์

180> 179: แทนที่ 6 การเกิดขึ้นของ10การใช้dที่มีค่าใช้จ่ายของการกำหนด 5 ไบต์ตัด 1 ไบต์ในทั้งหมด

179> 178: เพิ่งรู้ว่าa!=iสามารถถูกแทนที่ได้a-i


1

เยลลี่ 32 ไบต์

ȷ*`
%¢¢²¤:
2,3×Ñ×ÑƽDS%⁵ḌÇȷСṖ:Ñ

ลองออนไลน์!


โดยทั่วไปใช้เลขคณิตจุดคงที่ M อาจทำงานได้ดีที่นี่ แต่อย่างใดไม่ต้องการที่จะประเมินผลการศึกษาขนาดใหญ่เกินไปfloor(HUGE_NUMBER × sqrt(2) HUGE_NUMBERอย่างไรก็ตามการแบ่งจุดคงที่ดีกว่าแน่นอน


คำอธิบาย:

-------
ȷ*`       Calculate the base for fixed-point arithmetic.
ȷ         Number 1000.
 *        Raise to the power of...
  `       self. (so we have 1000 ** 1000 == 1e3000) Let B=1e3000.

-------
%¢¢²¤:    Given f × B, return a number approximately (1/frac(f)) × B.
          Current value: f × B.
%¢        Modulo by B. Current value: frac(f) × B.
  ¢²¤     B² (that is, 1e6000)
     :    integer-divide by. So we get B²/(frac(f)×B) ≃ 1/frac(f) × B.

-------
2,3×Ñ×ÑƽDS%⁵ḌÇȷСṖ:Ñ  Main link.
2,3                    The list [2,3].

    Ñ                  This refers to the next link as a monad, which is the
                       first link (as Jelly links wraparound)
   ×                   Multiply by. So we get [2,3]×1e3000 = [2e3000,3e3000]
     ×Ñ                Again. Current value = [2e6000,3e6000] = [2B²,3B²]

       ƽ              Integer square root.
                       Current value ≃ [sqrt(2B²),sqrt(3B²)]
                                     = [B sqrt(2),B sqrt(3)]

         DS            Decimal digits, and sum together.
           %⁵          Modulo 10.
             Ḍ         Convert back from decimal digits to integer.

                С     Repeatedly apply...
              Ç          the last link...
               ȷ         for 1000 times, collecting the intermediate results.
                  Ṗ    Pop, discard the last result.
                   :Ñ  Integer divide everything by B.

น่าเสียดายที่×⁺Ñใช้งานไม่ได้ ×Ѳ$อีกทางเลือกหนึ่ง
user202729

upvoted คำอธิบายจะได้รับการชื่นชมมาก
Weijun Zhou

1
@ WeijunZhou เสร็จแล้วบอกฉันถ้าคุณไม่เข้าใจอะไร
user202729

1

Haskell 207 ไบต์

ฉันไม่พบวิธีที่ง่ายในการคำนวณเศษส่วนต่อเนื่องดังนั้นฉันจึงทำงานด้วยตัวเลข 2000 หลัก

import Data.Ratio
r#y|x<-[x|x<-[9,8..],r>(y+x)*x]!!0=x:(100*(r-(y+x)*x))#(10*y+20*x)
c r|z<-floor r=z:c(1/(r-z%1))
main=print.take 1000.c$foldl1((+).(10*))(take 2000$(`mod`10)<$>zipWith(+)(3#0)(2#0))%10^1999

น่าเสียดายมาก! ฉันคาดหวังว่าจะเห็นคำตอบของ Haskell ที่สร้างรายชื่อที่ไม่มีที่สิ้นสุดและประเมินมันอย่างเกียจคร้าน ...
Weijun Zhou

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