coding_test/BAEKJOON

백준 2747번 C언어 풀이

CodeJin 2021. 12. 23. 22:26

https://www.acmicpc.net/problem/2747

 

2747번: 피보나치 수

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

피보나치 수열 기본문제. 숫자가 크지는 않지만, 45에 근접할수록 시간이 꽤 걸리기 때문에 다른 방식으로 풀어보자.

 

이번 문제는 피보나치 수열의 일반항으로 접근해보았다. 피보나치 수열의 일반항은 다음과 같다.

#include <stdio.h>
#include <math.h>

#define ULL unsigned long long
#define A (1 + sqrt(5)) / 2
#define B (1 - sqrt(5)) / 2

int fibo(int n) {
    return (int)(((pow(A, n) - pow(B, n)) / sqrt(5)));
}

int main () {
    int n;
    scanf("%d", &n);
    printf("%d", fibo(n));
}