目标
创建一个接受输入的程序/函数N,检查N随机整数对是否相对质数,然后返回sqrt(6 * N / #coprime)。
TL; DR
这些挑战是仅需要自然和大脑(也许还有一些可重复使用的资源)才能逼近Pi的算法模拟。如果您在僵尸启示录期间确实需要Pi,那么这些方法不会浪费弹药!还有另外八个挑战。检出沙盒帖子以提出建议。
模拟
我们在模拟什么?好吧,两个随机整数是相对质数(即coprime或gcd == 1)的概率是6/Pi/Pi,因此计算Pi的自然方法是挖出两个桶(或少数几个)的岩石。数他们;看看他们的gcd是否为1;重复。这样做后,一对夫妇很多次,sqrt(6.0 * total / num_coprimes)会趋向Pi。如果计算世界末日后的平方根使您感到紧张,请不要担心!有牛顿法。
我们如何模拟这一点?
- 接受输入
N - 请执行以下
N次数:- 均匀生成随机正整数,
i并且j - 用
1 <= i , j <= 10^6 - 如果
gcd(i , j) == 1:result = 1 - 其他:
result = 0
- 均匀生成随机正整数,
- 取
N结果的总和,S - 返回
sqrt(6 * N / S)
规格
- 输入值
- 灵活,可以采用任何标准方式(例如,函数参数,STDIN)和任何标准格式(例如,字符串,二进制)进行输入
- 输出量
- 灵活,以任何标准方式(例如退货,打印)提供输出
- 可以使用空格,尾随和前导空格
- 精度,请提供至少4位小数位数(即
3.1416)
- 计分
- 最短的代码胜出!
测试用例
由于随机的机会,您的输出可能与这些不一致。但平均而言,对于的给定值,您应该能获得如此高的准确性N。
Input -> Output
----- ------
100 -> 3.????
10000 -> 3.1???
1000000 -> 3.14??
N=10^6。

N = 1000000如果N程序太大,例如返回堆栈溢出,可以吗?