Cel
Utwórz program / funkcję, która pobiera dane wejściowe N
, sprawdź, czy N
losowe pary liczb całkowitych są względnie pierwsze, i zwraca sqrt(6 * N / #coprime)
.
TL; DR
Wyzwania te są symulacjami algorytmów, które wymagają jedynie natury i twojego mózgu (i być może pewnych zasobów wielokrotnego użytku) do przybliżenia Pi. Jeśli naprawdę potrzebujesz Pi podczas apokalipsy zombie, te metody nie marnują amunicji ! Przed nami jeszcze osiem wyzwań. Zapoznaj się z postem w piaskownicy, aby uzyskać rekomendacje.
Symulacja
Co symulujemy? Prawdopodobieństwo, że dwie losowe liczby całkowite są względnie pierwsze (tj. Coprime lub gcd == 1), jest 6/Pi/Pi
więc naturalnym sposobem obliczenia Pi byłoby zgarnięcie dwóch wiader (lub garści) kamieni; Policz je; sprawdź, czy ich gcd wynosi 1; powtarzać. Po zrobieniu tego kilka razy, sqrt(6.0 * total / num_coprimes)
będzie dążył do Pi
. Jeśli obliczanie pierwiastka kwadratowego w postapokaliptycznym świecie wywołuje niepokój, nie martw się! Jest na to Metoda Newtona .
Jak to symulujemy?
- Weź wkład
N
- Wykonaj następujące
N
czasy:- Jednolicie generują losowe liczby całkowite dodatnie,
i
orazj
- Z
1 <= i , j <= 10^6
- Jeżeli
gcd(i , j) == 1
:result = 1
- Jeszcze:
result = 0
- Jednolicie generują losowe liczby całkowite dodatnie,
- Weź sumę
N
wyników,S
- Powrót
sqrt(6 * N / S)
Specyfikacja
- Wejście
- Elastyczny, przyjmuj dane wejściowe na dowolny ze standardowych sposobów (np. Parametr funkcji, STDIN) i w dowolnym standardowym formacie (np. Ciąg, Binarny)
- Wydajność
- Elastyczny, daje wydruk w dowolny ze standardowych sposobów (np. Zwrot, wydruk)
- Dopuszczalne są białe pola, końcowe i białe znaki wiodące
- Dokładność, proszę podać co najmniej 4 miejsca dziesiętne dokładności (tj.
3.1416
)
- Punktacja
- Najkrótszy kod wygrywa!
Przypadki testowe
Twój wynik może się nie zgadzać z powodu losowej szansy. Ale średnio powinieneś uzyskać taką dokładność dla danej wartości N
.
Input -> Output
----- ------
100 -> 3.????
10000 -> 3.1???
1000000 -> 3.14??
N=10^6
.
N = 1000000
czy jest w porządku, jeśli program zwróci np. Przepełnienie stosu, jeśliN
jest zbyt duże?