PS/Baekjoon Online Judge

[백준 11238] Fibo [C]

kimyoungrok 2021. 8. 23. 04:00

백준 - 11238


풀이

T만큼 "백준 11778, 피보나치 수와 최대공약수"을 반복하는 문제이다. 


소스코드

#include <stdio.h>
#define ll long long
const int MOD = 1e9+7;
ll X[2][2] = {0, 1, 1, 1};

ll gcd(ll a, ll b){
    return b ? gcd(b, a%b) : a;
}
void fibo(ll result[][2], ll f[][2]){
    int temp[2][2] = {0,};
    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 2; j++)
            for (int k = 0; k < 2; k++)
                temp[i][j] += (result[i][k]*f[k][j]) %MOD;

    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 2; j++)
            result[i][j] = temp[i][j] %MOD;	
}
int main(){
    int T;
    scanf("%d", &T);
    while (T--){
        ll n, m, result[2][2] = {1, 0, 0, 1};
        scanf("%lld %lld", &n, &m);
        n = gcd(n, m);
	
        while (n){
            if (n & 1) fibo(result, X);
            fibo(X, X);
            n >>= 1;
        }
        printf("%lld\n", result[1][0]);
        X[0][0] = 0;
        X[0][1] = X[1][0] = X[1][1] = 1;
    }
}

출처 및 참고자료

 

11238번: Fibo

Fibonacci sequence is a well-known integer sequence that has many beautiful properties. Fibonacci sequence is something looks like this 0, 1, 1, 2, 3, 5, 8, 13, 21, … To make it formal, the mathematical term of Fibonacci sequence is define by recurrence

www.acmicpc.net

 

 

[백준 11778] 피보나치 수와 최대공약수 [C]

풀이 n, m번째 피보나치 수의 최대공약수는, gcd(n, m)번째 피보나치 수와 같다. 구글에 영어로 검색하니 바로뜬다 ... 이 무슨 "백준 11444, 피보나치 수 6" 코드를 사용해 풀이했다. 소스코드 #include #d

kyr-db.tistory.com