Schreiben Sie eine Funktion oder ein vollständiges Programm, das eine positive Zahl annimmt n
und n
Schritte eines iterativen Algorithmus zur Berechnung von π ausführt , der eine quadratische Konvergenz aufweist (dh die Anzahl der genauen Stellen bei jeder Iteration ungefähr verdoppelt), und dann 2 n richtige Stellen zurückgibt oder ausgibt (einschließlich) der Anfang 3). Ein solcher Algorithmus ist der Gauß-Legendre-Algorithmus . Sie können jedoch auch einen anderen Algorithmus verwenden, wenn Sie dies vorziehen.
Beispiele:
Eingabe 1
→ Ausgabe 3.1
Eingabe 2
→ Ausgabe 3.141
Eingabe 5
→ Ausgabe3.1415926535897932384626433832795
Bedarf:
- Jede Iteration des Algorithmus muss eine konstante Anzahl von Grundoperationen wie Addition, Subtraktion, Multiplikation, Division, Potenz und Wurzel (mit ganzzahligem Exponenten / Grad) ausführen wenn es sich um eine oder mehrere interne Schleifen handelt. Trigonometrische Funktionen und Potenzen mit komplexen Zahlen sind keine Grundoperationen.
- Es wird erwartet, dass der Algorithmus einen Initialisierungsschritt aufweist, der auch eine konstante Anzahl von Operationen aufweisen muss.
- Wenn der Algorithmus 1 oder 2 weitere Iterationen benötigt, um 2 n richtige Stellen zu erhalten, können Sie
n+2
statt nur bis zu Iterationen ausführenn
. - Wenn es nicht klar genug ist, nach den richtigen 2 n Ziffern, muss Ihr Programm nicht alles drucken sonst (wie richtigere Ziffern, falsche Ziffern oder das Gesamtwerk von Shakespeare).
- Ihr Programm muss Werte
n
von 1 bis mindestens 20 unterstützen. - Ihr Programm sollte
n
auf einem modernen Computer für = 20 nicht länger als eine Stunde dauern (keine harte Regel, aber versuchen Sie es vernünftig zu halten). - Das Programm darf nach der Initialisierung und der ersten Iteration des Algorithmus nicht mehr als 20 genaue Stellen erhalten.
- Das Programm muss unter Linux mit frei verfügbarer Software lauffähig sein.
- Der Quellcode darf nur ASCII-Zeichen enthalten.
Wertung:
Direkter Code Golf, kürzester Code gewinnt.
Gewinner:
Der Gewinner ist Digital Trauma, ich habe endlich seinen Code auf n = 20 laufen lassen (nur Spaß). Der Sonderpreis geht an primo für seine sehr schnelle Python-Lösung und seinen anderen Algorithmus :)
~q^(n^2)
dem 1. Abschnitt und ~q^2
dort dem 2. Abschnitt.