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