我需要编写程序来查找长度为数千位的数字的整数平方根。我不能使用Newton Raphson,因为我没有数据类型来存储和划分这么大的数字。我在C中使用长数组来存储数字。是否有任何算法可以通过迭代数字找到平方根?
编辑:
我不能像GMP一样使用外部库。
答案 0 :(得分:2)
如果您可以输入目标号码,那么必须才能存储至少一个这么大的号码。对于Newton-Raphson,您只需要能够减半并添加数字。想一想在不使用除法的情况下将数字减半的方法。
ETA:更正:可以通过加倍和减法来避免除法。
答案 1 :(得分:2)
你的' bignum'你似乎有很多非常不切实际的限制。实现。我可能会建议二元搜索?在每次迭代中,找到“中途”'值mid = (hi + lo) / 2
,并将搜索空间剪裁为[hi, mid]
或[mid, lo]
,具体取决于这些值的平方。
没有NR等那么快但是应该仔细处理平方范围值...
答案 2 :(得分:0)
您可以实施长除法来计算在学校教授的平方根。您可以为基数10实现此方法,并从左到右逐位计算结果。一旦计算出整数部分,就可以停止。