Submission

Status:

PPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: wasupum

Problemset: อนุกรม

Language: c

Time: 0.001 second

Submitted On: 2025-10-04 13:17:59

#include <stdio.h>

typedef long long ll;

void mul(ll F[2][2],ll M[2][2]){
    ll a = F[0][0]*M[0][0] + F[0][1]*M[1][0];
    ll b = F[0][0]*M[0][1] + F[0][1]*M[1][1];
    ll c = F[1][0]*M[0][0] + F[1][1]*M[1][0];
    ll d = F[1][0]*M[0][1] + F[1][1]*M[1][1];
    
    F[0][0] = a;
    F[0][1] = b;
    F[1][0] = c;
    F[1][1] = d;
}

void power(ll F[2][2],int n){
    if(n == 0 || n == 1)return;
    
    ll M[2][2] = {{1,1},{1,0}};
    power(F,n/2);
    mul(F,F);
    
    if(n % 2 == 1)mul(F,M);
}

ll fib( int n){
    if(n == 0 )return 0;
    ll F[2][2] = {{1,1},{1,0}};
    power(F,n-1);
    return F[0][0];
}

int main(void){
    int n;
    scanf("%d",&n);
    printf("%lld",fib(n));
    return 0;
}