Objetivo
Crie um programa / função que receba uma entrada N
, verifique se N
pares aleatórios de números inteiros são relativamente primos e retorne sqrt(6 * N / #coprime)
.
TL; DR
Esses desafios são simulações de algoritmos que exigem apenas a natureza e seu cérebro (e talvez alguns recursos reutilizáveis) para aproximar o Pi. Se você realmente precisa de Pi durante o apocalipse zumbi, esses métodos não desperdiçam munição ! Existem mais oito desafios por vir. Faça o checkout da caixa de areia para fazer recomendações.
Simulação
O que estamos simulando? Bem, a probabilidade de que dois inteiros aleatórios sejam relativamente primos (por exemplo, coprime ou gcd == 1) é 6/Pi/Pi
, portanto, uma maneira natural de calcular Pi seria colher dois baldes (ou punhados) de rochas; conta-os; veja se o seu gcd é 1; repetir. Depois de fazer isso um par muitas vezes, sqrt(6.0 * total / num_coprimes)
tenderá para Pi
. Se calcular a raiz quadrada no mundo pós-apocalíptico o deixa nervoso, não se preocupe! Existe o método de Newton para isso.
Como estamos simulando isso?
- Aceitar entrada
N
- Faça os seguintes
N
horários:- Gere uniformemente números inteiros positivos aleatórios
i
ej
- Com
1 <= i , j <= 10^6
- Se
gcd(i , j) == 1
:result = 1
- Outro:
result = 0
- Gere uniformemente números inteiros positivos aleatórios
- Pegue a soma dos
N
resultados,S
- Retorna
sqrt(6 * N / S)
Especificação
- Entrada
- Flexível, receba informações de qualquer uma das formas padrão (por exemplo, parâmetro de função, STDIN) e em qualquer formato padrão (por exemplo, String, Binário)
- Saída
- Flexível, produza de qualquer forma padrão (por exemplo, devolução, impressão)
- Espaço em branco, espaço em branco à direita e à esquerda é aceitável
- Precisão, forneça pelo menos 4 casas decimais de precisão (ou seja
3.1416
)
- Pontuação
- O código mais curto vence!
Casos de teste
Sua saída pode não estar alinhada com isso, por causa do acaso. Mas, em média, você deve obter tanta precisão para o valor especificado de N
.
Input -> Output
----- ------
100 -> 3.????
10000 -> 3.1???
1000000 -> 3.14??
N=10^6
.
N = 1000000
ou tudo bem se o programa retornar, por exemplo, um estouro de pilha seN
for muito grande?