Obbiettivo
Crea un programma / funzione che accetta un input N
, controlla se N
coppie casuali di numeri interi sono relativamente primi e restituisce sqrt(6 * N / #coprime)
.
TL; DR
Queste sfide sono simulazioni di algoritmi che richiedono solo la natura e il cervello (e forse alcune risorse riutilizzabili) per approssimare Pi. Se hai davvero bisogno di Pi durante l'apocalisse di zombi, questi metodi non sprecano munizioni ! Ci sono altre otto sfide da affrontare. Controlla il post sandbox per dare consigli.
Simulazione
Cosa stiamo simulando? Bene, la probabilità che due numeri interi casuali siano relativamente primi (cioè coprime o gcd == 1) è 6/Pi/Pi
, quindi un modo naturale per calcolare Pi sarebbe quello di raccogliere due secchi (o manciate) di rocce; contali; vedere se il loro gcd è 1; ripetere. Dopo averlo fatto un paio di volte, sqrt(6.0 * total / num_coprimes)
tenderà a farlo Pi
. Se calcolare la radice quadrata nel mondo post-apocalittico ti rende nervoso, non preoccuparti! C'è il metodo di Newton per questo.
Come stiamo simulando questo?
- Prendi input
N
- Fai i seguenti
N
orari:- Generare uniformemente numeri interi casuali positivi
i
ej
- Con
1 <= i , j <= 10^6
- Se
gcd(i , j) == 1
:result = 1
- Altro:
result = 0
- Generare uniformemente numeri interi casuali positivi
- Prendi la somma dei
N
risultati,S
- Ritorno
sqrt(6 * N / S)
specificazione
- Ingresso
- Flessibile, accetta input in uno dei modi standard (es. Parametro di funzione, STDIN) e in qualsiasi formato standard (es. String, Binary)
- Produzione
- Flessibile, fornisce output in uno dei modi standard (ad es. Ritorno, stampa)
- Sono ammessi spazi bianchi, finali e spazi bianchi iniziali
- Precisione, si prega di fornire almeno 4 cifre decimali di precisione (es.
3.1416
)
- punteggio
- Vince il codice più corto!
Casi test
L'output potrebbe non allinearsi con questi, a causa di possibilità casuali. Ma in media, dovresti ottenere tanta precisione per il valore dato di N
.
Input -> Output
----- ------
100 -> 3.????
10000 -> 3.1???
1000000 -> 3.14??
N=10^6
.
N = 1000000
o va bene se il programma restituisce ad esempio uno stack overflow seN
è troppo grande?