양수 주어 N 및 숫자 상기 N 번째 테트 레이션 의 A는 로서 정의된다 ^ ( ^ ( ^ (... ^ ))), 여기서 ^는 지수 (또는 전력)을 나타낸다 및식이 포함 숫자 는 정확히 n 번입니다.
다시 말해, tetration은 right-associative 반복 지수화입니다. 들면 N = 4 = 1.6 테트 레이션 1.6 ^ (1.6 ^ (1.6 ^ 1.6))이다 ≈ 3.5743.
n에 대한 정션의 역함수 는 수퍼 로그 입니다. 이전 예에서 4는 "super-base"1.6이 포함 된 3.5743의 수퍼 로그입니다.
도전
양의 정수를 감안할 때 N , 찾아 X 하도록 n은 슈퍼베이스에서 자체의 슈퍼 로그 인 x가 . 즉, 발견 X 되도록 X ^ ( X ^ ( X ^ (... ^ x가 ))) (와 X가 나타나는 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무한대에 가까워?