我有一个整数n
,我想得到一个数字,它提升到自身的力量等于n
.我怎样才能做到这一点?
所以我们想解决这个问题x^x = n
.这与找到相当于的n = n的n的根是完全不同的y^n = n
.
查看权力时要做的第一件事就是现在使用自然日志来考虑日志
x ln x = ln n
.这对我们没有多大帮助,并且它不是标准函数,因此需要某种形式的收敛程序,我们想要解决f(x) = x ln x - ln n = 0
.这个函数很好地单调增加比x快一点,所以它应该很容易解决.
我们可以使用牛顿的方法.首先找到衍生物
f'(x) = log x + 1
.从猜测开始,x1
将会有更新的猜测x2 = x1 - f(x1) / f'(x)
.如果你这样做了几次它应该很好地收敛.在我的实验发现x
,使得x^x = 21
它仅仅用了不到6个itterations收敛.
在psudocode
x[0] = ln(n); for(i=0; i<6;++i ) { fx = x[i] * ln( x[i] ) - ln(n); df = ln( x[i] ) + 1; x[i+1] = x[i] - fx / df; } println(x[6], pow(x[6], x[6]))