Napisz funkcję lub pełny program, który przyjmuje liczbę dodatnią n
i wykonuje n
kroki iteracyjnego algorytmu obliczania π, który ma kwadratową zbieżność (tzn. W przybliżeniu podwaja liczbę dokładnych cyfr przy każdej iteracji), a następnie zwraca lub drukuje 2 n poprawnych cyfr (w tym początek 3). Jednym z takich algorytmów jest algorytm Gaussa-Legendre'a , ale możesz dowolnie używać innego algorytmu.
Przykłady:
wejście 1
→ wyjście 3.1
wejście 2
→ wyjście 3.141
wejście 5
→ wyjście3.1415926535897932384626433832795
Wymagania:
- Każda iteracja algorytmu musi wykonywać stałą liczbę podstawowych operacji, takich jak dodawanie, odejmowanie, mnożenie, dzielenie, moc i pierwiastek (z wykładnikiem liczby całkowitej / stopniem) - każda taka operacja na „dużej” liczbie całkowitej / dziesiętnej jest liczona jako jedna parzysta jeśli obejmuje wewnętrznie jedną lub więcej pętli. Dla jasności funkcje trygonometryczne i potęgi obejmujące liczby zespolone nie są podstawowymi operacjami.
- Algorytm powinien mieć krok inicjalizacji, który musi również mieć stałą liczbę operacji.
- Jeśli algorytm potrzebuje 1 lub 2 kolejnych iteracji, aby uzyskać 2 n poprawnych cyfr, możesz wykonać do
n+2
iteracji zamiast po prostun
. - Jeśli nie było wystarczająco jasne, po poprawnych 2 n cyfrach, twój program nie może drukować niczego innego (np. Więcej poprawnych cyfr, błędnych cyfr lub kompletnych dzieł Szekspira).
- Twój program musi obsługiwać wartości
n
od 1 do co najmniej 20. - Twój program nie powinien zająć więcej niż godzinę na
n
= 20 na nowoczesnym komputerze (nie jest to trudna zasada, ale staraj się, aby była rozsądna). - Program nie może uzyskać więcej niż 20 dokładnych cyfr po inicjalizacji i pierwszej iteracji algorytmu.
- Program musi być uruchamiany w systemie Linux przy użyciu ogólnodostępnego oprogramowania.
- Kod źródłowy musi używać tylko znaków ASCII.
Punktacja:
Prosty kod golfowy, najkrótszy kod wygrywa.
Zwycięzca:
Zwycięzcą jest Digital Trauma, wreszcie skończyłem uruchamiać jego kod na n = 20 (tylko żartowałem). Nagrodę specjalną otrzymuje primo za bardzo szybkie rozwiązanie w Pythonie i inny algorytm :)
~q^(n^2)
zgodne z tamtejszą sekcją i tam ~q^2
z tamtą drugą sekcją.