#include <iostream>
using namespace std;
int main() {
int i=1;
int j=0;
int k=0;
int h=1;
int t=0;
int n;
cin>>n;
while (n) {
if (n%2) {
t=j*h;
j=i*h+j*k+t;
i=ik+t;
}
t=h*h;
h=2*k*h+t;
k=k*k+t;
n=n/2;
}
cout<<j;
return 0;
}
これは、インターネットで見つけたフィボナッチの最速のアルゴリズムです。他のアルゴリズムは理解していますが、これは私には意味がありません。
このアルゴリズムが行列の乗算や二乗によるべき乗とどのように関連しているかわかりません。誰か説明できますか?