एक सकारात्मक पूर्णांक को देखते हुए एन और एक नंबर एक , एन वें tetration की एक के रूप में परिभाषित किया गया है एक ^ ( एक ^ ( एक ^ (... ^ एक ))) है, जहां ^ घातांक (या शक्ति) को दर्शाता है और अभिव्यक्ति शामिल नंबर एक बिल्कुल n बार।
दूसरे शब्दों में, टेट्रेशन राइट-एसोसिएटिव इटेरेटेड एक्सपोनेंशन है। के लिए n = 4 और एक = 1.6 tetration 1,6 ^ (1,6 ^ (1,6 ^ 1,6)) है ≈ 3.5743।
के संबंध में tetration का प्रतिलोम समारोह n है सुपर लघुगणक । पिछले उदाहरण में, 4, "सुपर-बेस" 1.6 के साथ 3.5743 का सुपर-लॉगरिदम है।
चुनौती
एक धनात्मक पूर्णांक n को देखते हुए , x को खोजें जैसे कि n , सुपर-बेस x में स्वयं का सुपर-लघुगणक है । अर्थात्, x को ऐसे x ^ ( x ^ ( x ^ (... ^ x ))) में खोजें ( x के साथ n बार प्रदर्शित होने पर ) n को बराबर करें ।
नियम
कार्यक्रम या समारोह की अनुमति दी।
इनपुट और आउटपुट प्रारूप हमेशा की तरह लचीले होते हैं।
एल्गोरिथ्म को सैद्धांतिक रूप से सभी सकारात्मक पूर्णांकों के लिए काम करना चाहिए। व्यवहार में, इनपुट स्मृति, समय या डेटा-प्रकार प्रतिबंधों के कारण अधिकतम मूल्य तक सीमित हो सकता है। हालाँकि, कोड को 100कम से कम एक मिनट से कम के इनपुट के लिए काम करना चाहिए ।
एल्गोरिथ्म को सैद्धांतिक रूप से 0.001सटीकता के साथ परिणाम देना चाहिए । व्यवहारिक रूप से, संख्यात्मक संगणनाओं में संचित त्रुटियों के कारण आउटपुट परिशुद्धता अधिक खराब हो सकती है। हालांकि, 0.001संकेतित परीक्षण मामलों के लिए आउटपुट सटीक होना चाहिए ।
सबसे छोटा कोड जीतता है।
परीक्षण के मामलों
1 -> 1
3 -> 1.635078
6 -> 1.568644
10 -> 1.508498
25 -> 1.458582
50 -> 1.448504
100 -> 1.445673
संदर्भ कार्यान्वयन
यहां मटलब / ऑक्टेव में एक संदर्भ कार्यान्वयन है ( आइडोन पर प्रयास करें )।
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?