[백준] 26518 수열의 극한값

정태준·2023년 1월 6일
0

백준

목록 보기
3/11

문제

초항 a1a_1, a2a_2가 정해져 있고 ai=bai1+cai2a_i=b \cdot a_{i-1}+c \cdot a_{i-2} (i3i \ge 3)이 성립하는 수열 aa에서, nn이 무한히 증가할 때

anan1\frac{a_n}{a_{n-1}}의 극한을 구하여라.

이 값은 항상 수렴함을 증명할 수 있다.

입력

첫 번째 줄에 정수 bb, cc, a1a_1, a2a_2가 공백으로 구분되어 주어진다. (1b,c,a1,a2109)(1 \leq b, c, a_1, a_2 \leq 10^9)

출력

식의 극한값을 출력한다. 절대/상대 오차는 10610^{-6}까지 허용한다.

어떻게 풀까?

  1. 수열의 극한값이 항상 존재함을 문제에서 명시했기 때문에 이 값을 kk라 두고 이를 출력한다.
  2. anan1\frac{a_n}{a_{n-1}} 의 극한값은 an1an2\frac{a_{n-1}}{a_{n-2}} 극한값이랑 같다.
  3. ai=bai1+cai2a_i=b \cdot a_{i-1}+c \cdot a_{i-2} (i3i \ge 3) 에서 양변을 ai1a_{i-1}로 나누면 anan1=b+can2an1\frac{a_n}{a_{n-1}}=b+c \cdot \frac{a_{n-2}}{a_{n-1}} (i3i \ge 3)이 된다.

an2an1\frac{a_{n-2}}{a_{n-1}}1an1an2\frac{1}{\frac{a_{n-1}}{a_{n-2}}} 이므로 nn를 무한히 증가할 때 1k\frac{1}{k} 로 수렴한다.

수렴값을 kk 로 치환하면 위 식은 k=b+ckk = b + \frac{c}{k} 가 되고 양변을 kk 를 곱하고 k에 대한 방정식으로 정리하면 k2bkc=0k^{2} - b \cdot k - c = 0 이 된다.
이는 kk 에 관한 2차 방정식이다.

bb, cc, a1a_1, a2a_2 는 모두 양수이므로 anan1\frac{a_n}{a_{n-1}}의 극한값인 kk는 양수임을 알 수 있다.

근의공식에 의해 k=b+b2+4c2k = \frac{b + \sqrt{b^{2} + 4 \cdot c}}{2} 이므로 이를 출력해주면 된다.

고민한 부분

소수점 표현을 어떻게 할지가 고민이었다. 소수점 아래 6자리 이상 출력해야할것 같아서

cout << fixed;
cout.precision(10);

을 활용했다.

profile
개발자가 되고싶은 사람

0개의 댓글