目标
创建一个接受输入的程序/函数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
程序太大,例如返回堆栈溢出,可以吗?