Cho một số nguyên dương n và một số một , các n -thứ tetration của một được định nghĩa là một ^ ( một ^ ( một ^ (... ^ một ))), nơi ^ biểu lũy thừa (hoặc điện) và biểu thức chứa số a chính xác n lần.
Nói cách khác, tetration là lũy thừa lặp lại liên kết phải. Dành cho n = 4 và a = 1.6 thì phép hóa là 1.6 ^ (1.6 ^ (1.6 ^ 1.6)) 3.5743.
Các chức năng nghịch đảo của tetration đối với n là siêu logarit . Trong ví dụ trước, 4 là siêu logarit của 3,5743 với "siêu cơ sở" 1.6.
Các thách thức
Cho một số nguyên dương n , tìm x sao cho n là siêu logarit của chính nó trong siêu cơ sở x . Nghĩa là tìm x sao cho x ^ ( x ^ ( x ^ (... ^ x ))) (với x xuất hiện n lần) bằng n .
Quy tắc
Chương trình hoặc chức năng được phép.
Định dạng đầu vào và đầu ra linh hoạt như bình thường.
Thuật toán nên hoạt động trên lý thuyết cho tất cả các số nguyên dương. Trong thực tế, đầu vào có thể bị giới hạn ở giá trị tối đa do hạn chế về bộ nhớ, thời gian hoặc loại dữ liệu. Tuy nhiên, mã phải hoạt động cho các đầu vào lên đến100
thiểu trong ít hơn một phút.
Các thuật toán về lý thuyết nên đưa ra kết quả với 0.001
độ chính xác. Trong thực tế, độ chính xác đầu ra có thể tồi tệ hơn do lỗi tích lũy trong tính toán số. Tuy nhiên, đầu ra phải chính xác cho đến 0.001
các trường hợp thử nghiệm được chỉ định.
Mã ngắn nhất sẽ thắng.
Các trường hợp thử nghiệm
1 -> 1
3 -> 1.635078
6 -> 1.568644
10 -> 1.508498
25 -> 1.458582
50 -> 1.448504
100 -> 1.445673
Thực hiện tham khảo
Đây là một triển khai tham chiếu trong Matlab / Octave (thử tại 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)
Đối với N = 10
điều này choresult = 1.5085
.
Đoạn mã sau là kiểm tra độ chính xác đầu ra, sử dụng số học có độ chính xác thay đổi:
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
Điều này mang lại:
- Dành cho
x = 1.5085
:y = 10.00173...
- Dành cho
x = 1.5085 + .001
:y = 10.9075
- Cho
x = 1.5085 - .001
nó choy = 9.23248
.
như vậy 1.5085
là một giải pháp hợp lệ với .001
độ chính xác.
x
hội tụ như n
cách tiếp cận vô cùng?