Biorąc pod uwagę dodatnią liczbę całkowitą n wyjściową, suma pierwszych n cyfr dziesiętnych części ułamkowej π n .
Przykładowe dane wejściowe i wyjściowe:
1 → 1
2 → 14
3 → 6
4 → 13
5 → 24
50 → 211
500 → 2305
5000 → 22852
Wbudowane funkcje obliczające cyfry π lub oceniające albo szeregi mocy, albo ciągłe ułamki są niedozwolone. Obowiązują standardowe luki . Wejścia / wyjścia mogą mieć wygodny format (stdin, stdout, funkcja wejścia / wyjścia itp.).
Najkrótszy kod w bajtach wygrywa.
code-golf
math
arithmetic
pi
orlp
źródło
źródło
Odpowiedzi:
Python - 191 bajtów
~ 4x szybsza wersja - 206 bajtów
Dane wejściowe są pobierane ze standardowego wejścia. Wyjście dla n = 5000 zajmuje około 14s przy drugim skrypcie (lub 60s przy pierwszym).
Przykładowe użycie:
Zastosowana formuła jest następująca:
gdzie A n jest n- tą liczbą naprzemienną , którą można formalnie zdefiniować jako liczbę naprzemiennych permutacji w zbiorze wielkości n (patrz także: A000111 ). Alternatywnie sekwencja może być zdefiniowana jako kompozycja o numerach styczna siecznej liczb ( 2n = S n , 2n + 1 = T n ), o tym później.
Mały współczynnik korygujący c n szybko zbliża się do 1, gdy n staje się duży i jest określony przez:
Dla n = 1 oznacza to ocenę serii Leibniza . Zbliżenie π jako 10 pół liczba wymaganych warunków może być obliczona jako:
co zbiega się (w zaokrągleniu w górę) do 17 , chociaż mniejsze wartości n wymagają znacznie więcej.
Do obliczenia A n istnieje kilka algorytmów, a nawet wyraźna formuła, ale wszystkie są kwadratowe według n . Pierwotnie kodowałem implementację algorytmu Seidela , ale okazuje się on zbyt wolny, aby był praktyczny. Każda iteracja wymaga zapisania dodatkowego terminu, a jego terminy bardzo szybko rosną („zły” rodzaj O (n 2 ) ).
Pierwszy skrypt wykorzystuje implementację algorytmu pierwotnie podanego przez Knutha i Buckholtza :
Chociaż nie jest to wyraźnie określone, algorytm oblicza jednocześnie zarówno Liczby Styczne, jak i Liczby Secant. Drugi skrypt wykorzystuje odmianę tego algorytmu autorstwa Brenta i Zimmermanna , która oblicza T lub S , w zależności od parzystości n . Poprawa jest kwadratowa o n / 2 , stąd poprawa prędkości ~ 4x.
źródło
Python 2, 246 bajtów
Podjąłem podobne podejście do mojej odpowiedzi w Calculate π z kwadratową zbieżnością . Ostatnia linia przyjmuje N-tą potęgę pi i sumuje cyfry. Test N = 5000 zajmuje około minuty.
Niektóre testy:
Nieskluczony kod:
źródło
a=j
ip=j
doa=p=j
IIRC. Może.Pyth, 33
Na podstawie tej odpowiedzi Isaacg . Prawdopodobnie można by grać w golfa więcej. Powolny.
źródło