求第 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
中描述的手动数字提取方法
我已经在 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
中描述的手动数字提取方法