ป.ร. ให้ไว้เป็นจำนวนเต็มบวกnและหมายเลขที่n -th tetrationของถูกกำหนดให้เป็น^ ( ^ ( ^ ( ... ^ ))) ที่^หมายถึงการยกกำลัง (หรือพลังงาน) และการแสดงออกมี จำนวนว่าnครั้ง
กล่าวอีกนัยหนึ่งการทำซ้ำก็คือการยกกำลังซ้ำที่เชื่อมโยงกันอย่างถูกต้อง สำหรับn = 4 และa = 1.6 การกรองคือ 1.6 ^ (1.6 ^ (1.6 ^ 1.6)) ≈ 3.5743
ฟังก์ชั่นผกผันของ tetration ด้วยความเคารพnเป็นซุปเปอร์ลอการิทึม ในตัวอย่างก่อนหน้านี้ 4 เป็นลอการิทึม super ของ 3.5743 กับ "super-base" 1.6
ความท้าทาย
ป.ร. ให้ไว้เป็นจำนวนเต็มบวก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
การดำเนินการอ้างอิง
นี่คือการใช้งานอ้างอิงใน 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
วิธีการที่อินฟินิตี้?