피보나치 수 분석

시간 제한1초메모리 제한128 MB

요약
16진수로 주어진 lo-hi 구간마다 구간에 들어가는 피보나치 수를 인덱스, 밑이 2인 로그, 소인수분해와 함께 출력한다.
난이도

보통10점 중 6점

유형
수학, 구현, 정수론, 시뮬레이션
정답자
아직 제출이 없습니다

문제

피보나치 수 F(n)은 다음과 같이 재귀적으로 정의된다.

F(0)=0,F(1)=1,F(n)=F(n−1)+F(n−2) (n≥2)F(0) = 0, \quad F(1) = 1, \quad F(n) = F(n-1) + F(n-2) \ (n \ge 2)

정수 구간 [lo, hi]가 주어질 때, 이 구간(양 끝 포함)에 들어가는 모든 피보나치 수를 찾아 각각에 대해 다음 정보를 출력한다.

  • 피보나치 수의 인덱스 n과 값 F(n)
  • 그 값의 밑이 2인 로그 lg (소수점 여섯째 자리까지)
  • 그 값의 소인수분해 (오름차순, 중복된 소인수는 나타나는 횟수만큼 출력)

단, 다음 규칙을 따른다.

  • 0은 첫 번째 피보나치 수이지만 0의 로그는 정의되지 않으므로, 로그 대신 lg does not exist를 출력한다.
  • 0과 1은 소인수가 없으므로, 소인수분해 대신 No prime factors를 출력한다.
  • 구간에 들어가는 피보나치 수가 하나도 없으면 No Fibonacci numbers in the range를 출력한다.

F(1) = 1과 F(2) = 1처럼 인덱스는 다르지만 값이 같은 피보나치 수는 각각 따로 출력한다.

입력

입력은 여러 개의 구간으로 이루어지며, 각 구간은 한 줄에 음이 아닌 두 정수 lo와 hi로 주어진다. 두 수는 접두사 0x가 붙은 16진수로 표기된다. 예를 들어 0x1a는 26을 뜻한다.

각 정수는 64비트 부호 있는 정수 범위에 속한다. 파일의 끝(EOF)에 도달하거나 어떤 줄에서 lo ≥ hi이면 입력을 종료한다. (종료 조건에 해당하는 줄은 처리하지 않는다.)

출력

처리하는 각 구간마다 먼저 구간을 나타내는 머리글 Range {lo} to {hi}:를 십진수로 출력한다. 이어서 구간에 들어가는 각 피보나치 수에 대해 아래 형식으로 두 줄씩 출력한다.

  • 첫째 줄: Fib({n}) = {값}, lg is {로그} (값이 0이면 Fib({n}) = 0, lg does not exist)
  • 둘째 줄: Prime factors: {소인수들} (값이 0 또는 1이면 No prime factors)

밑이 2인 로그(lg)는 소수점 여섯째 자리까지 출력하고, 소인수는 공백으로 구분한다. 서로 다른 구간의 출력은 빈 줄 하나로 구분한다.

예제3

  1. 예제 1

    입력
    0x0 0x8
    0x9 0xc
    0x9 0x40
    0x0 0x0
    
    예상 출력
    Range 0 to 8:
    Fib(0) = 0, lg does not exist
    No prime factors
    Fib(1) = 1, lg is 0.000000
    No prime factors
    Fib(2) = 1, lg is 0.000000
    No prime factors
    Fib(3) = 2, lg is 1.000000
    Prime factors: 2
    Fib(4) = 3, lg is 1.584963
    Prime factors: 3
    Fib(5) = 5, lg is 2.321928
    Prime factors: 5
    Fib(6) = 8, lg is 3.000000
    Prime factors: 2 2 2
    
    Range 9 to 12:
    No Fibonacci numbers in the range
    
    Range 9 to 64:
    Fib(7) = 13, lg is 3.700440
    Prime factors: 13
    Fib(8) = 21, lg is 4.392317
    Prime factors: 3 7
    Fib(9) = 34, lg is 5.087463
    Prime factors: 2 17
    Fib(10) = 55, lg is 5.781360
    Prime factors: 5 11
  2. 예제 2

    입력
    0x1 0x4
    0x0 0x0
    
    예상 출력
    Range 1 to 4:
    Fib(1) = 1, lg is 0.000000
    No prime factors
    Fib(2) = 1, lg is 0.000000
    No prime factors
    Fib(3) = 2, lg is 1.000000
    Prime factors: 2
    Fib(4) = 3, lg is 1.584963
    Prime factors: 3
  3. 예제 3

    입력
    0xa 0xd
    0x0 0x0
    
    예상 출력
    Range 10 to 13:
    Fib(7) = 13, lg is 3.700440
    Prime factors: 13