求第 n 个根的整数部分

Find integer part of nth root

我已经在 c#(学校项目)中为大整数实现了 class,我必须计算 n 次方根。我尝试了二进制搜索,但是对于非常大的整数来说它花费的时间太长了。我也尝试实现牛顿法。问题是我的除法函数 return 只有整数部分,没有数字。牛顿法需要用数字进行除法运算。我的愿望是找到一种方法来仅从 NTH ROOT 获取整数部分。

牛顿法是

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

这也适用于整数运算。您可能需要通过加减 1 来更正结果。

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

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

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


您也可以尝试实施http://en.wikipedia.org/wiki/Shifting_nth_root_algorithm

中描述的手动数字提取方法