编写一个函数或完整的程序,该程序需要一个正数n
并执行n
迭代算法的步骤,以计算具有二次收敛性的π(即,每次迭代将其精确数字的数量大约加倍),然后返回或打印2 n个正确的数字(包括开始3)。Gauss-Legendre算法就是这样一种算法,但是如果您愿意,可以自由使用其他算法。
例子:
输入1
→输出3.1
输入2
→输出3.141
输入5
→输出3.1415926535897932384626433832795
要求:
- 该算法的每次迭代都必须执行恒定数量的基本运算,例如加,减,乘,除,乘方和根(具有整数指数/度)-对“大”整数/十进制数的每个此类运算都被计为偶数如果它在内部涉及一个或多个循环。需要明确的是,涉及复数的三角函数和幂不是基本运算。
- 期望该算法具有初始化步骤,该初始化步骤还必须具有恒定数量的操作。
- 如果算法需要再进行1或2次迭代才能获得2 n个正确的数字,则您最多可以执行
n+2
迭代,而不仅仅是执行n
。 - 如果还不够清晰,请在正确的2 n位数字之后,程序不得再打印其他任何内容(例如,更正确的数字,错误的数字或莎士比亚的完整著作)。
- 您的程序必须支持
n
从1到至少20的值。 n
在现代计算机上,= 20的程序花费的时间不应超过一个小时(这不是硬性规定,但是请尽量使其合理)。- 在算法的初始化和第一次迭代之后,程序不得获得超过20个准确的数字。
- 该程序必须可使用免费软件在Linux中运行。
- 源代码只能使用ASCII字符。
得分:
简单明了的代码高尔夫,最短的代码获胜。
优胜者:
赢家是Digital Trauma,我终于在n = 20上完成了他的代码(只是在开玩笑)。Primo因其非常快速的python解决方案和不同的算法而获得了特别奖:)
~q^(n^2)
根据那里的第一部分和那里~q^2
的第二部分。