一个超大的数p如何求他的n次方根k,即k^n=p,求k。
1≤n≤10^2,1≤n≤10^9,1≤k≤10^9
牛顿迭代法,可以参考一下这个
#include <stdio.h>
#include <math.h>
double nthRoot(double p, int n)
{
double x0 = pow(p, 1.0/n); // 初始猜测值
double x = x0; // 迭代值
double diff = 1e-9; // 迭代停止条件,可根据实际情况调整
while (1) {
double fx = pow(x, n) - p; // 函数值
double fxn = n * pow(x, n-1); // 函数导数值
double dx = fx / fxn; // 迭代步长
x -= dx; // 更新迭代值
if (fabs(dx) < diff) { // 达到停止条件
break;
}
}
return x;
}
int main()
{
double p = 123456789.0;
int n = 3;
double k = nthRoot(p, n);
printf("%.9f\n", k);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:难度:🔴🔴⚪⚪⚪