高速電力を有効式を簡略化することにより、計算量を減らすことができます。
8 5 ^例えば、どのような方法の簡略化においては、8×8×8×8×8であるなし。
高速電力インデックスアイデアは、それによって計算の数を減らすこと、分解することで、参照インデックスは、分離に二次システムです。
5ため、^ 2 ^ 2 SO 5 + 0 = 2、二つの文字列101にすることができます。
したがって、^ 5 = 8 * 8 ^ 1 8 ^ 4は、効果的計算の5倍に二回から計算。
INT quickpow(INT A、int型B){ int型 RES = 1 ; // 結果を格納するための、 INT ANS = A; // バイナリB乗格納するために使用される、 しばらく(!B = 0 ){ IF(B%以下2 == 1 ) RES * = ANS; ANS * = ANS; B / = 2 ; } 戻りRES; }
これは、元の正方形の各サイクルは^ 2であるので、それは^ 2 * ^ 2に相当し、価値* = ANS ANSことに留意あります。
同じ思考力を行列と高速で、それは分解の使用を考えている、マトリックスの分解生成物は、マトリックス乗算が置換されている乗算があります。
ベクター<ベクトル<INT >>マルチ(ベクトル<ベクトル<INT >> M1、ベクトル<ベクトル<INT >> M2){ ベクトル<ベクトル<INT >> M3。 m3.resize(N) {(I ++; I <N INTがI = 0)するための M3 [I] .resize(N) } ため(INT iは= 0、I <N; I ++){ ため(INT J = 0であり、j <N; J ++){ ための(int型のk = 0; K <N、K ++){ M3 [I] [J] + = M1 [i]は[K] * M2 [K] [J]。 } } } M3を返します。 } ベクトル<ベクトル<INT >> quckmatrix(ベクトル<ベクトル<INT >> M){ ベクトル<ベクトル<INT >> ANS = M。 ベクトル<ベクトル<int型>> RES。 res.resize(N) RES [i]は.resize(N) } 用(INTがI = 0、I <N - 、I ++){ //マトリックス 。RES [I] [I] = 1; } ながら(K> 0){ // Kバイナリ操作のために、 IF(K = 2% 1 =){ RES =マルチ(RES、ANS); } K / = 2; ANS =マルチ(ANS、ANS); } 戻りRES; }