我想计算p的 nth 正根,例如我们有 n = 2 和 p = 16 ,答案是 4 因为
4 ^ 2 = 16 。我希望这样做的数量很大( 1 <= n <= 200 , 1&lt; = p&lt; 10 ^ 101 )。我不知道我该怎么做才能尽快。
n=2 p=16 Answer 4
n=7 p=4357186184021382204544 Answer 1234
答案 0 :(得分:2)
如果你必须提出自己的算法,那里有任意的精确数学包。 但你可以试试这个:用任何方式得到一个双精度(一个双精度数可以处理10 ^ 101。)然后使用math.h :: pow(p,1.0 / n),那个答案将接近右边整数(围绕它?)。但是如果p超过15位且n太小,这将失败,例如,p = 10 ^ 100,n = 2给出50位数的答案,这对于double来说是一个太大的整数,无法准确表示。
将101位数字变为双倍:将数字(字符串)剪切成10个数字块,将每个数字乘以10到适当的功率,并将它们相加。
答案 1 :(得分:0)
尝试牛顿的方法,如下所述: http://en.wikipedia.org/wiki/Nth_root_algorithm
答案 2 :(得分:0)
记录p,除以n,然后取反日志:
nthRoot(p, n) := Math.Power(10, Math.Log(p) / n)
不确定你是专门处理整数还是什么,但这是伪造的代码。