Fortsetzung Bruchteil der ziffernweisen Summe der Quadratwurzeln

10

Einführung

Ihre Aufgabe ist es, die ersten 1000 Terme in der fortgesetzten Bruchdarstellung der ziffernweisen Summe aus Quadratwurzel von 2 und Quadratwurzel von 3 zu generieren.

Mit anderen Worten, erstellen Sie genau die folgende Liste (das Ausgabeformat ist jedoch flexibel).

[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]

Herausforderung

Die folgende allgemeine Einführung in die fortgesetzte Fraktion stammt aus der Herausforderung Vereinfachen einer fortgesetzten Fraktion .

Fortgesetzte Brüche sind Ausdrücke, die Brüche iterativ beschreiben. Sie können grafisch dargestellt werden:

Fortsetzung der Fraktion

Oder sie können als Werteliste dargestellt werden: [a0, a1, a2, a3, ... an]

Diese Herausforderung besteht darin, den fortgesetzten Bruchteil der ziffernweisen Summe von sqrt(2)und herauszufinden, wobei die sqrt(3)ziffernweise Summe wie folgt definiert ist:

Nehmen Sie die Ziffern in der Dezimaldarstellung von sqrt(2)und sqrt(3)und erhalten Sie die Summe Ziffer für Ziffer:

    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 ...

Behalten Sie dann nur die letzte Ziffer der Summe bei und kompilieren Sie sie zurück zur Dezimaldarstellung einer reellen Zahl

    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 ...

Die ziffernweise Summe von sqrt(2)und sqrt(3)ist daher 2.1462633698..., und wenn sie mit fortgeführtem Bruch ausgedrückt wird, sind die ersten 1000 erhaltenen Werte (dh bis ) diejenigen, die im Einführungsabschnitt aufgeführt sind.a0a999

Technische Daten

  • Sie können eine Funktion oder ein vollständiges Programm schreiben. Weder sollte Eingaben nehmen. Mit anderen Worten, die Funktion oder das Programm sollten ohne Eingaben ordnungsgemäß funktionieren. Es spielt keine Rolle, was die Funktion oder das Programm tut, wenn eine nicht leere Eingabe bereitgestellt wird.

  • Sie sollten in STDOUT ausgeben. Nur wenn Ihre Sprache die Ausgabe in STDOUT nicht unterstützt, sollten Sie das nächstgelegene Äquivalent in Ihrer Sprache verwenden.

  • Sie müssen STDERR nicht sauber halten, und das versehentliche Stoppen des Programms ist zulässig, solange die erforderliche Ausgabe in STDOUT oder seinen Entsprechungen erfolgt.

  • Sie können die Ausgabe über ein beliebiges Standardformular bereitstellen .

  • Dies ist , die niedrigste Anzahl von Bytes gewinnt.

  • Wie üblich gelten hier Standardlücken .

Weijun Zhou
quelle

Antworten:

2

Kotlin 1.1-Skript , 304 293 Byte

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)}

Ein bisschen ausführlich leider: /

Muss mit JDK 9 ausgeführt werden, wie in dieser Version sqrthinzugefügt BigDecimal. Interessanterweise konnte ich keine TIO-Site mit den Funktionen Kotlin 1.1 und JDK 9 finden (Ideone und repl.it führen beide Kotlin 1.0 aus, das die Destrukturierung in Lambdas nicht unterstützt, und TIO beschwert sich, dass sqrtes keine gibt).

Druckt jedes Element durch eine neue Zeile getrennt.

Edit ( -11): wurde printlnan den Anfang des Schleifenkörpers verschoben und eine zusätzliche Iteration hinzugefügt, um zu vermeiden, dass der Methodenaufruf wiederholt wird. Eine zusätzliche Berechnung wird durchgeführt, aber für nichts verwendet.

Moira
quelle
2

Python 2 , 193 ... 179 178 Bytes

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)

Probieren Sie es online aus!

Die Berechnung sqrt(2)und sqrt(3)auf eine solche Präzision mit einem kurzen Code ist ein harter Job in Python und andere Sprachen.

2000 Stellen sind erforderlich, um sicherzustellen, dass die Erweiterung korrekt ist (1020 reicht aus, aber ich werde sie nicht ändern, da keine Verbesserung vorliegt), und die Zeilen 4 bis 6 sind die ganzzahlige Quadratwurzel.

193> 180: Die ziffernweise Modulosumme wird jetzt von einer Schleife anstelle einer Array-Manipulation übertragen

180> 179: Ersetzt die 6 Vorkommen der 10Verwendung ddurch die Kosten für die Definition mit 5 Bytes, wodurch insgesamt 1 Byte gekürzt wird

179> 178: Gerade realisiert, dass a!=idurch ersetzt werden kanna-i

Shieru Asakoto
quelle
1

Gelee , 32 Bytes

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

Probieren Sie es online aus!


Verwenden Sie grundsätzlich eine Festkomma-Arithmetik. M mag hier besser floor(HUGE_NUMBER × sqrt(2)funktionieren, will aber irgendwie nicht zu groß bewerten HUGE_NUMBER. Auf jeden Fall ist die Festkommadivision definitiv besser.


Erläuterung:

-------
ȷ*`       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
quelle
Funktioniert leider ×⁺Ñnicht. Alternativ ×Ѳ$.
user202729
Upvoted. Erklärung wäre sehr dankbar.
Weijun Zhou
1
@WeijunZhou Fertig, sag mir, wenn du etwas nicht verstehst.
user202729
1

Haskell 207 Bytes

Ich konnte keinen einfachen Weg finden, um den fortgesetzten Bruch faul zu berechnen, also arbeitete ich auch mit 2000 Ziffern.

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
Damien
quelle
Was für eine Schande! Ich hatte erwartet, eine Haskell-Antwort zu sehen, die die unendliche Liste generiert und
träge
@WeijunZhou Ich werde es später versuchen, wenn ich etwas Zeit habe. Zumindest sqrt generiert eine unendliche Liste. Ich muss nur herausfinden, wie man die als unendliche Liste geschriebene Dezimalzahl invertiert. Vielleicht kann jemand helfen
Damien