查找第n个根的整数部分

时间:2015-05-24 09:55:23

标签: c# math binary-search biginteger newtons-method

我在c#(学校项目)中为Big Integer实现了一个类,我必须计算第n个根。我尝试过二进制搜索,但是对于非常大的整数来说它需要太长时间。我也尝试过实现牛顿法。问题是我的Division函数只返回整数部分,没有数字。牛顿方法需要用数字进行除法运算。我的愿望是找到一种方法,只能从NTH ROOT获得整数部分。

1 个答案:

答案 0 :(得分:0)

牛顿的方法是

N(x) = x - (x^n-a)/(n*x^(n-1))=( (n-1)*x + a/(x^(n-1)))/n

这应该适用于整数运算。您可能必须通过plusminus 1更正结果。

重要的是使用良好的初始值,因为远离根,对于n次多项式的牛顿方法的收敛是几何的。与因子(1-1 / n)成线性关系,因此对于较大的n值非常慢。

使用基数B,对于x数字设置为d的整数q=d/n,通过截断数字序列并转换为浮点来计算rx=x/B^(n*q) ,以浮点计算ry=pow(rx, 1.0/n)并将y=ry*B^q转换回biginteger格式以用作第一个近似根。

请在使用此方法时报告您的问题。

您也可以尝试按照http://en.wikipedia.org/wiki/Shifting_nth_root_algorithm

中的说明实施手动数字提取方法