Pozitif bir tamsayı verilen n ve bir sayı a , n -inci tetrasyon arasında bir olarak tanımlanan bir ^ ( a ^ ( a ^ (... ^ a ))), burada ^ üs (veya güç) temsil eder ve ifade içerir numara bir tam n defa.
Başka bir deyişle, tetrasyon sağ çağrışımlı yinelemeli üslüdür. İçin , n = 4 ve bir = 1.6 tetrasyon 1.6 ^ (1.6 ^ (1.6 ^ 1.6)) olan, ≈ 3,5743.
İle ilgili olarak tetrasyon ters fonksiyonu n olan süper logaritma . Önceki örnekte, 4, 3.5743'ün "süper-baz" 1.6 ile süper logaritmasıdır.
Meydan okuma
Pozitif bir tamsayı Verilen n , bulmak x öyle ki , n süper baz kendisi süper logaritmasidir x . Olduğunu bulmak x öyle ki x ^ ( x ^ ( x ^ (... ^ x ))) (ile x görünen n kez) eşittir n .
kurallar
Program veya işleve izin verilir.
Giriş ve çıkış formatları her zamanki gibi esnektir.
Algoritma teorik olarak tüm pozitif tamsayılar için çalışmalıdır. Pratikte, giriş bellek, zaman veya veri tipi kısıtlamaları nedeniyle maksimum bir değerle sınırlı olabilir. Ancak, kodun 100
en az bir dakikadan daha kısa sürede girilebilmesi için çalışması gerekir .
Algoritma teorik olarak sonucu 0.001
kesin olarak vermelidir . Pratikte, sayısal hesaplamalarda biriken hatalar nedeniyle çıktı hassasiyeti daha kötü olabilir. Bununla birlikte, çıktı 0.001
belirtilen test senaryolarına kadar doğru olmalıdır .
En kısa kod kazanır.
Test senaryoları
1 -> 1
3 -> 1.635078
6 -> 1.568644
10 -> 1.508498
25 -> 1.458582
50 -> 1.448504
100 -> 1.445673
Referans uygulaması
İşte Matlab / Octave'da bir referans uygulaması ( Ideone'da deneyin ).
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)
Bunun için N = 10
verir result = 1.5085
.
Aşağıdaki kod, değişken hassasiyetli aritmetik kullanan çıkış hassasiyetinin kontrolüdür :
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
Bu şunu verir:
- İçin
x = 1.5085
:y = 10.00173...
- İçin
x = 1.5085 + .001
:y = 10.9075
- Çünkü
x = 1.5085 - .001
veriry = 9.23248
.
böylece 1.5085
sahip geçerli bir çözümdür .001
hassas.
x
olarak yakınsama n
sonsuza yaklaşan?