Objectif
Créez un programme / une fonction qui prend une entrée N
, vérifiez si N
les paires aléatoires d’entiers sont relativement premiers et retourne sqrt(6 * N / #coprime)
.
TL; DR
Ces défis sont des simulations d’algorithmes qui ne nécessitent que la nature et votre cerveau (et peut-être quelques ressources réutilisables) pour approcher Pi. Si vous avez vraiment besoin de Pi lors de l'apocalypse des zombies, ces méthodes ne gaspillent pas les munitions ! Huit autres défis sont à venir. Consultez le message du bac à sable pour faire des recommandations.
Simulation
Que simulons-nous? Eh bien, la probabilité que deux entiers aléatoires soient relativement premiers (c.-à-d. Coprime ou gcd == 1) est 6/Pi/Pi
, donc un moyen naturel de calculer Pi serait d'extraire deux seaux (ou poignées) de roches; compte les; voir si leur gcd est 1; répéter. Après avoir fait cela plusieurs fois, vous sqrt(6.0 * total / num_coprimes)
aurez tendance à Pi
. Si calculer la racine carrée dans un monde post-apocalyptique vous rend nerveux, ne vous inquiétez pas! Il y a la méthode de Newton pour cela.
Comment simulons-nous cela?
- Prendre une entrée
N
- Faites les
N
temps suivants :- Générer uniformément des entiers positifs aléatoires,
i
etj
- Avec
1 <= i , j <= 10^6
- Si
gcd(i , j) == 1
:result = 1
- Autre:
result = 0
- Générer uniformément des entiers positifs aléatoires,
- Prenez la somme des
N
résultats,S
- Revenir
sqrt(6 * N / S)
spécification
- Contribution
- Flexible, prenez les entrées de n'importe quelle manière standard (par exemple, paramètre de fonction, STDIN) et dans n'importe quel format standard (par exemple, chaîne, binaire)
- Sortie
- Flexible, donnez la sortie de n'importe quelle manière standard (retour, impression, etc.)
- Les espaces blancs, les espaces de fuite et les espaces de début sont acceptables
- Précision, veuillez fournir au moins 4 décimales de précision (c.-à-d.
3.1416
)
- Notation
- Le code le plus court gagne!
Cas de test
Votre sortie peut ne pas s'aligner sur celles-ci, à cause du hasard. Mais en moyenne, vous devriez obtenir autant de précision pour la valeur donnée de N
.
Input -> Output
----- ------
100 -> 3.????
10000 -> 3.1???
1000000 -> 3.14??
N=10^6
.
N = 1000000
ou est-il acceptable si le programme renvoie par exemple un débordement de pile s'ilN
est trop volumineux?