문제
초항 a1, a2가 정해져 있고 ai=b⋅ai−1+c⋅ai−2 (i≥3)이 성립하는 수열 a에서, n이 무한히 증가할 때
an−1an의 극한을 구하여라.
이 값은 항상 수렴함을 증명할 수 있다.
입력
첫 번째 줄에 정수 b, c, a1, a2가 공백으로 구분되어 주어진다. (1≤b,c,a1,a2≤109)
출력
식의 극한값을 출력한다. 절대/상대 오차는 10−6까지 허용한다.
어떻게 풀까?
- 수열의 극한값이 항상 존재함을 문제에서 명시했기 때문에 이 값을 k라 두고 이를 출력한다.
- an−1an 의 극한값은 an−2an−1 극한값이랑 같다.
- ai=b⋅ai−1+c⋅ai−2 (i≥3) 에서 양변을 ai−1로 나누면 an−1an=b+c⋅an−1an−2 (i≥3)이 된다.
an−1an−2 는 an−2an−11 이므로 n를 무한히 증가할 때 k1 로 수렴한다.
수렴값을 k 로 치환하면 위 식은 k=b+kc 가 되고 양변을 k 를 곱하고 k에 대한 방정식으로 정리하면 k2−b⋅k−c=0 이 된다.
이는 k 에 관한 2차 방정식이다.
b, c, a1, a2 는 모두 양수이므로 an−1an의 극한값인 k는 양수임을 알 수 있다.
근의공식에 의해 k=2b+b2+4⋅c 이므로 이를 출력해주면 된다.
고민한 부분
소수점 표현을 어떻게 할지가 고민이었다. 소수점 아래 6자리 이상 출력해야할것 같아서
cout << fixed;
cout.precision(10);
을 활용했다.