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


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.