正の整数で指定されたN及び数A、N番目のテトレーションのように定義される^(^(^(^ ... )))、^はべき乗(または電力)を示し、発現が含ま数を正確にN回。
言い換えれば、テトラションは右結合反復累乗法です。以下のためのN = 4、および= 1.6テトレーションは、1.6 ^(1.6 ^(1.6 ^ 1.6))≈3.5743です。
nに関するテトラションの逆関数は、超対数です。前の例では、4は「スーパーベース」1.6の3.5743のスーパー対数です。
チャレンジ
正の整数nが与えられた場合、nがスーパーベースxにおけるそれ自体のスーパー対数になるようなxを見つけます。つまり、見つけるのx、このようなことのx ^(X ^(X ^(... ^ xは)))(と、xが登場するのn倍)に等しいn個。
ルール
許可されたプログラムまたは機能。
入出力形式は通常どおり柔軟です。
アルゴリズムは、すべての正の整数に対して理論的に機能するはずです。実際には、メモリ、時間、またはデータ型の制限により、入力は最大値に制限される場合があります。ただし、コードは100
少なくとも1分未満で入力に対して機能する必要があります。
アルゴリズムは、理論的には0.001
正確な結果を提供する必要があります。実際には、数値計算の累積誤差により、出力精度が低下する場合があります。ただし、0.001
指定されたテストケースに対して出力は正確でなければなりません。
最短のコードが優先されます。
テストケース
1 -> 1
3 -> 1.635078
6 -> 1.568644
10 -> 1.508498
25 -> 1.458582
50 -> 1.448504
100 -> 1.445673
リファレンス実装
Matlab / Octaveのリファレンス実装を次に示します(Ideoneで試してください)。
N = 10; % input
t = .0001:.0001:2; % range of possible values: [.0001 .0002 ... 2]
r = t;
for k = 2:N
r = t.^r; % repeated exponentiation, element-wise
end
[~, ind] = min(abs(r-N)); % index of entry of r that is closest to N
result = t(ind);
disp(result)
N = 10
これのために与えるresult = 1.5085
。
次のコードは、可変精度演算を使用した出力精度のチェックです。
N = 10;
x = 1.5085; % result to be tested for that N. Add or subtract 1e-3 to see that
% the obtained y is farther from N
s = num2str(x); % string representation
se = s;
for n = 2:N;
se = [s '^(' se ')']; % build string that evaluates to iterated exponentiation
end
y = vpa(se, 1000) % evaluate with variable-precision arithmetic
これは与える:
- のために
x = 1.5085
:y = 10.00173...
- のために
x = 1.5085 + .001
:y = 10.9075
- 以下のために
x = 1.5085 - .001
それができますy = 9.23248
。
そう1.5085
で有効なソリューションである.001
精度が。
x
として収束n
無限大に近づきますか?