最初の定義を見て:
あなたは、読むことができませんか?説明するサイクリングの考えとそう。
まず、行とマトリックス相の列の数だけが、第2の行列の乗算が理にかなっている間ことを知っている必要があります。
その後、要素C(i、j)の上に、製品として理解することができる〜A及びBの第i行j列上への答え。
したがって、加速時マトリックスは、I、J、Kを列挙することによって計算することができる場合。
列の数は、コードを達成することをここで有名なフィボナッチ証書:
#include <ビット/ STDC ++ H>
の#define P十億七
使用 名前空間STDを、
長い 長い ST [ 10 ] [ 10 ]。
長い 長い TMP [ 10 ] [ 10 ]。
長い 長い [ 10 ] [ 10 ]。
ボイドcheng1()
{
memsetの(TMP、0、はsizeof (TMP))。
以下のために(int型 i = 1 ; iが<= 2 ; I ++ ){
ため(INT J = 1; J <= 2、J ++ ){
TMP [ 1 ] [I] + =(ST [ 1 ] [J] * [J] [I])%のP。
TMP [I] [J]%のP;
}
}
のための(int型 i = 1 ; iが= < 2 ; iが++ ){
ため(INT J = 1 ; J <= 2、J ++ ){
ST [i] [j]は = TMP [I] [j]を。
}
}
}
ボイドcheng2()
{
memsetの(TMP、0、はsizeof(TMP))。
以下のために(int型 i = 1 ; iは= < 2 ; iは++ ){
ため(int型の J = 1 ; J <= 2、J ++ ){
ための(int型のk = 1 ; K <= 2 ; kは++ ){
TMP [I] [ J] + =([K] [J] * [I] [K])%のP。
TMP [I] [J]%= P。
}
}
}
のために(int型 i = 1 ; iは= < 2 I ++; {)
のため(INT J = 1 ; J <= 2、J ++ ){
[I] [j]は = TMP [I] [j]を。
}
}
}
ボイド JZKSM(長い 長N)
{
ながら(N){
場合(N - 1 )cheng1();
cheng2();
N / = 2 。
}
}
int型のmain()
{
長い 長N。
cinを >> N;
[ 1 ] [ 1 ] = 1、[1 ] [ 2 ] = 1、[ 2 ] [ 1 ] = 1 。
ST [ 1 ] [ 1 ] = 1、STは、[ 1 ] [ 2 ] = 1 。
JZKSM(N - 2 )。
もし(N == 1 || N == 2 ){
COUT << " 1 " 。
リターン 0 ;
}
COUT << ST [ 1 ] [ 1 ]%のP。
}