Tor
Erstellen Sie ein Programm / eine Funktion, die eine Eingabe akzeptiert N
, prüfen Sie, ob N
zufällige Paare von Ganzzahlen relativ prim sind, und geben Sie zurück sqrt(6 * N / #coprime)
.
TL; DR
Diese Herausforderungen sind Simulationen von Algorithmen, für die nur die Natur und Ihr Gehirn (und möglicherweise einige wiederverwendbare Ressourcen) erforderlich sind, um sich dem Pi anzunähern. Wenn Sie Pi während der Zombie-Apokalypse wirklich brauchen, verschwenden diese Methoden keine Munition ! Es gibt noch acht weitere Herausforderungen. Überprüfen Sie den Sandbox-Post , um Empfehlungen abzugeben .
Simulation
Was simulieren wir? Nun, die Wahrscheinlichkeit, dass zwei zufällige ganze Zahlen relativ prim (dh coprime oder gcd == 1) sind 6/Pi/Pi
, ist so, dass ein natürlicher Weg, um Pi zu berechnen, darin besteht, zwei Eimer (oder eine Handvoll) Steine zu schöpfen; zähle sie; sehen, ob ihr gcd 1 ist; wiederholen. Nachdem Sie dies einige Male getan haben, sqrt(6.0 * total / num_coprimes)
tendieren Sie dazu Pi
. Wenn die Berechnung der Quadratwurzel in der postapokalyptischen Welt Sie nervös macht, machen Sie sich keine Sorgen! Dafür gibt es Newtons Methode .
Wie simulieren wir das?
- Eingaben übernehmen
N
- Mach die folgenden
N
Zeiten:- Einheitlich zufällige positive ganze Zahlen erzeugen,
i
undj
- Mit
1 <= i , j <= 10^6
- Wenn
gcd(i , j) == 1
:result = 1
- Sonst:
result = 0
- Einheitlich zufällige positive ganze Zahlen erzeugen,
- Nehmen Sie die Summe der
N
Ergebnisse,S
- Rückkehr
sqrt(6 * N / S)
Spezifikation
- Eingang
- Flexibel, Eingaben auf eine der Standardarten (zB Funktionsparameter, STDIN) und in einem beliebigen Standardformat (zB String, Binary)
- Ausgabe
- Flexibel, Ausgabe auf eine der Standardarten (z. B. Rückgabe, Druck)
- Leerzeichen, nachfolgende und führende Leerzeichen sind zulässig
- Genauigkeit, geben Sie bitte mindestens 4 Dezimalstellen Genauigkeit (dh
3.1416
)
- Wertung
- Kürzester Code gewinnt!
Testfälle
Ihre Ausgabe stimmt möglicherweise nicht mit diesen überein, weil zufällige Zufälle vorliegen. Aber im Durchschnitt sollte man für den gegebenen Wert von ungefähr so viel Genauigkeit bekommen N
.
Input -> Output
----- ------
100 -> 3.????
10000 -> 3.1???
1000000 -> 3.14??
N=10^6
.
N = 1000000
oder ist es in Ordnung, wenn das Programm z. B. einen Stapelüberlauf zurückgibt, wenn erN
zu groß ist?