Algorithm 🧑🏻💻/백준(BOJ)
[백준,c++] 11444번 - 피보나치수 6
dkswnkk
2021. 10. 28. 20:09
11444번: 피보나치 수 6
첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
#include <iostream>
#include <vector>
#define MOD 1000000007
using namespace std;
using ll = long long;
using mat = vector<vector<ll>>;
ll n;
mat mulMatrix(mat &a, mat & b){
mat tmp(2,vector<ll>(2));
for(int i = 0; i < 2; i++){
for(int j = 0; j < 2; j++){
for(int k = 0; k < 2; k++){
tmp[i][j] += a[i][k] * b[k][j];
}
tmp[i][j] %= MOD;
}
}
return tmp;
}
ll fibonacci(ll num){
mat ans = {{{0,1},{1,0}}};
mat a = {{1,1},{1,0}};
while(num > 0){
if(num & 1) ans = mulMatrix(a,ans);
a = mulMatrix(a,a);
num /= 2;
}
return ans[0][0];
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
ll num; cin>>num;
cout<<fibonacci(num);
}