피보나치 정밀도로 피의 디스플레이 파워


9

음이 아닌 단일 정수 n을 취하고 n 번째 피보나치 수 와 동일한 소수 자릿수로 Phi 의 n 제곱 (ϕ, 황금 비율, 약 1.61803398874989)을 출력하는 코드를 작성 하십시오 .

코드는 모든 입력에 대해 최대 10 자리 (10 진수 55 자리)까지 올바른 숫자 시퀀스를 생성해야합니다. 출력은 사람이 읽을 수있는 10 진수 여야합니다. 마지막 숫자를 가장 가까운 값으로 반올림하거나 값을자를 지 여부를 선택할 수 있습니다. 코드에서 사용하는 코드를 지정하십시오.

n 과 출력, 최대 10까지 내림 :

 0   1
 1   1.6
 2   2.6
 3   4.23
 4   6.854
 5  11.09016
 6  17.94427190
 7  29.0344418537486
 8  46.978713763747791812296
 9  76.0131556174964248389559523684316960
10 122.9918693812442166512522758901100964746170048893169574174

n 과 가장 가까운 값으로 반올림 한 최대 10 개의 출력 :

 0   1
 1   1.6
 2   2.6
 3   4.24
 4   6.854
 5  11.09017
 6  17.94427191
 7  29.0344418537486
 8  46.978713763747791812296
 9  76.0131556174964248389559523684316960
10 122.9918693812442166512522758901100964746170048893169574174

7 번째 피보나치 수는 13이므로 n = 7, ϕ 7에 대한 출력값 은 소수점 이하 13 자리입니다. 너무 적은 숫자를 표시하는 후행 0을 자르면 안됩니다. 첫 번째 표에서 6에 대한 출력을 참조하십시오. 소수점 이하 자릿수를 8 자리로 유지하려면 단일 0으로 끝납니다.

보너스로, 프로그램이 올바르게 출력 할 수있는 가장 높은 숫자를 말하십시오.


소수점 이하 자릿수를 처리 할 수없는 언어는 어떻습니까? 소수점 이하 15 자리 이상을 표시 할 수 없으므로 n = 7까지만 작동하는 24 바이트 Pyth 솔루션이 있습니다. 어쨌든 게시해야합니까?
Denker

@ DenkerAffe 물론, 게시 할 수는 있지만 마지막 세 가지 테스트 사례를 수행 할 수 없기 때문에 유효하지 않다는 메모가 있습니다. 누군가가 귀하의 답변에 정확성을 더하는 것은 영감 일 수 있습니다!
CJ Dennis

답변:


3

dc, 26 바이트

99k5v1+2/?^d5v/.5+0k1/k1/p

쉼표 뒤에 99 자리의 초기 정밀도로 인해 이것은 입력 11을 처리 합니다. 동적 (또는 더 높은 정적) 정밀도가 가능하지만 바이트 수를 증가시킵니다.

테스트 사례

$ for ((i = 0; i < 11; i++)) { dc -e '99k5v1+2/?^d5v/.5+0k1/k1/p' <<< $i; }
1
1.6
2.6
4.23
6.854
11.09016
17.94427190
29.0344418537486
46.978713763747791812296
76.0131556174964248389559523684316960
122.9918693812442166512522758901100964746170048893169574174

작동 원리

원하는 출력이 φ n 이므로 피보나치 수 F (n) 를 추가 노력없이 ⌊φ n ÷ √5 + 0.5⌋계산할 수 있습니다.

99k                         Set the precision to 99.
   5v                       Compute the square root of 5.
     1+                     Add 1.
       2/                   Divide by 2.
                            This pushes the golden ratio.
         ?                  Read the input from STDIN.
          ^                 Elevate the golden ratio to that power.
           d                Push a copy.
            5v/             Divide it by the square root of 5.
               .5+          Add 0.5.
                  0k        Set the precision to 0.
                    1/      Divide by 1, truncating to the desired precision.
                            This pushes F(n).
                      k     Set the precision to F(n).
                       1/   Divide by 1, truncating to the desired precision.
                         p  Print.

0

수학, 50 바이트

N[GoldenRatio^#,2^#]~NumberForm~{2^#,Fibonacci@#}&

기본 솔루션. 가장 가까운 값으로 반올림합니다. 여전히 컴퓨터의 메모리가 부족하지 않은 가장 높은 값을 확인합니다. 입력 32은 작동하지만 45 분이 걸리고 16GiB의 RAM을 사용합니다. 그러나 무한한 시간과 메모리가 주어지면 이론적으로 모든 값에서 실행될 수 있습니다.


1
출력을 게시 하시겠습니까? 마지막 몇 가지 테스트 사례를 추가하려면 속임수를 사용하고 출력을 사용해야합니다. 어느쪽으로 반올림합니까? 아래로 또는 가장 가까운 곳으로? "무한한 자원"이면 충분합니다. 나는 당신이 메모리 부족을 요구하지 않습니다!
CJ Dennis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.