【问题标题】:Find integer part of nth root查找第 n 个根的整数部分
【发布时间】:2015-08-05 23:33:07
【问题描述】:
我已经在 c#(学校项目)中为 Big Integer 实现了一个类,我必须计算第 n 个根。我尝试了二进制搜索,但是对于非常大的整数来说它花费的时间太长了。我也尝试实现牛顿法。问题是我的除法函数只返回整数部分,没有数字。牛顿法需要用数字进行除法运算。我的愿望是找到一种仅从 NTH ROOT 获取整数部分的方法。
【问题讨论】:
标签:
c#
math
binary-search
biginteger
newtons-method
【解决方案1】:
牛顿法是
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 回到 biginteger 格式,用作第一个近似根。
请报告您在使用此方法时遇到的问题。
您也可以尝试实现http://en.wikipedia.org/wiki/Shifting_nth_root_algorithm中描述的手动数字提取方法