生成2的平方根数字
我想生成两到三百万个数字的平方根数字。
我知道Newton-Raphson,但由于缺乏大整数支持,我不知道如何在C或C ++中实现它。有人能指出我正确的方向吗?
另外,如果有人知道如何在python中做到这一点(我是初学者),我也会很感激。
没有找到相关结果
已邀请:
9 个回复
镶骄册筷
以
开头。这收敛于sqrt(2)(实际上给出了它的连续分数表示)。 现在关键点:这可以表示为矩阵乘法(类似于斐波那契) 如果a_n和b_n是步骤中的第n个数字 [1 2] [a_n b_n] T = [a_(n + 1)b_(n + 1)] T [1 1] 现在给了我们 [1 2] n [a_1 b_1] T = [a_(n + 1)b_(n + 1)] T [1 1] 因此,如果2x2矩阵是A,我们需要计算An,这可以通过重复平方来完成,并且只使用整数运算(因此您不必担心精度问题)。 另请注意,您获得的a / b将始终为缩小形式(如gcd(a,b)= gcd(a + 2b,a + b)),因此如果您考虑使用分数类来表示中间体结果,不要! 由于第n个分母类似于(1 + sqrt(2))^ n,要获得300万个数字,您可能需要计算直到第3671656个术语。 请注意,即使您正在寻找~360万个术语,重复平方也可以让您计算O(Log n)乘法和加法中的第n项。 此外,这可以很容易地平行,不像像Newton-Raphson等迭代的那样。
厢界山攀
掀辟髓观粟
赣借
厘恼轨
的平方根。
返回所有小数位的迭代器。算法中的
和
是下一个数字的最小值和最大值。当它们相等时,我们输出该数字。 请注意,这不会处理某些特殊情况,例如连续分数中的负数。 (此代码是Haskell代码的改编,用于处理已经浮动的连续分数。)
恋卡
只是一些警告。 您需要将结果转换为字符串并将小数点添加到正确的位置(如果您希望打印小数点)。 将非常大的整数转换为字符串的速度不是很快。 划分非常大的整数也不是很快(在Python中)。 根据系统的性能,计算2到3百万个小数位的平方根可能需要一个小时或更长时间。 我还没有证明循环总是会终止。它可能在最后一位数不同的两个值之间振荡。或者它可能不会。
烫珊
队辅坟阮阶
死搭胯