什么是有效的算法来逐位找到一个非常大的整数平方根?

时间:2014-05-25 11:53:59

标签: c algorithm square-root integer-arithmetic

我需要编写程序来查找长度为数千位的数字的整数平方根。我不能使用Newton Raphson,因为我没有数据类型来存储和划分这么大的数字。我在C中使用长数组来存储数字。是否有任何算法可以通过迭代数字找到平方根?

编辑:

我不能像GMP一样使用外部库。

3 个答案:

答案 0 :(得分:2)

如果您可以输入目标号码,那么必须才能存储至少一个这么大的号码。对于Newton-Raphson,您只需要能够减半并添加数字。想一想在不使用除法的情况下将数字减半的方法。

ETA:更正:可以通过加倍和减法来避免除法。

答案 1 :(得分:2)

你的' bignum'你似乎有很多非常不切实际的限制。实现。我可能会建议二元搜索?在每次迭代中,找到“中途”'值mid = (hi + lo) / 2,并将搜索空间剪裁为[hi, mid][mid, lo],具体取决于这些值的平方。

没有NR等那么快但是应该仔细处理平方范围值...

答案 2 :(得分:0)

您可以实施长除法来计算在学校教授的平方根。您可以为基数10实现此方法,并从左到右逐位计算结果。一旦计算出整数部分,就可以停止。

Calculation of squareroot