确定p的第n个正根的程序

时间:2014-01-09 00:24:25

标签: c++ algorithm

我想计算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

3 个答案:

答案 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)

不确定你是专门处理整数还是什么,但这是伪造的代码。