マトリックスパワーの迅速な導入:
1.高速の整数パワー:
迅速なパワーマトリックス、および高速電力アルゴリズムの利点の説明を惹起するために、我々は最初の整数を累乗することができます。
あなたは今、X ^ 8を計算したい場合は:それはX-あるX- X- X- X- X- X-は珍しいアイデアをX-従って、上記の1、乗算七回ずつ取ります。
(X- X-)(X- X-)(X- X-)(X- X-)
ように計算する、次の3回の乗算を実行し、次にX ^ 2、第X ^ 2を乗じた、見つけるためのこの方法は、乗算を4回行われます。私たちは、以下の7倍を持っています。だから、すぐに整数の電力をカウントするために、我々はアイデアの組み合わせを検討します。
今ポイントが速く計算するべきかを検討します。次に、高速の整数乗を計算します。例:X ^ 19番目。
10011:バイナリは19です。
(^ X-M)(N-X- ^)= X- ^(N-M +)を
19 = X ^である- (^ X-16)(X- ^ 2)*(X- ^ 1)
それを解決するためにどのようにして高速電力。次のコードを考えてみましょう:
X ^ Nの解決値を
X ^ Nを算出///高速整数累乗、
1 INT QuickPow(int型のx、int型のN)//着信指標と塩基X N 2 { 3 int型のRES =のX; 4 INT ANS = 1。; 。5 ながら(N) 6 { 7 IF(N&。1 )である// N奇数 。8 { 9 ANS = ANS * RES; 10 } 11 RESの=のRES * RES。 12で N = N >> 1。; N //右シフト 13である } 14 リターン ANS。
}
それでは、右端に次のコードを見てみましょう:
X ^ 19の用語について:
バイナリ19は次のとおりです。10011
初期値:
それでは、右端に次のコードを見てみましょう:
X ^ 19の用語について:
バイナリ19は次のとおりです。10011
初期値:
年= 1 ; RES = xで。
10011 1それは奇妙で、最後のものです。
ANS = ANS何も* = X; 何も =何も何もありません* = X ^ 2。
次に、右側の1、1001年
最後のビットが1である澤1001は、それが奇数であります
ANS = ANS = X *何も*(X ^ 2)= X ^ 3 何 =何も何も* = X ^ 2 * X ^ 2 = X ^ 4
次に、右側の1、100
最後の一つは、現在の数が偶数である、0です。
RESの=のRES * RES = X ^ 4 * X ^ 4 = X ^ 8
次に右のいずれか、10
最後のビットが0であるが、現在の数が偶数です。
RESの=のRES * RES = X ^ 8 * X ^ 8 = X ^ 16
1つの右一つは、
最後のビットが1である、現在の数が奇数であります
ANS = ANS何* =(x ^ 3)*(X ^ 16)= X ^ 19 何 =何=何も* X ^ 32
2.マトリックスクイックパワーアルゴリズム記事
迅速な思考と整数演算アルゴリズムと同様の権限:
1枚の 構造体マット 2 { 3。 LLのM [ 101 ] [ 101 ]、 4 }; // メモリ構造 5。マットA、E; // Aは、eは、出力行列であり、行列の入力である 6。 マット加算ムル(Xマット、マットY) 7。 { 8。 マットC; 9 ための(int型私は= 1 ; I <= N; ++ I)は{ 10 のために(INT J = 1 ; J <= N-; ++ J){ 11。 CM&LT [I] [ J] = 0 ; 12である } 13です } 14 のために(int型 i = 1 ; iが<= N; ++ I){ 15 のために(INT J = 1 ; J <= N; ++ j)は{ 16 のための(int型のk = 1、N = <K + + K){ 17 センチ[I] [J] =センチ[I] [J]%のMOD + XM [I] [K] * YM [K] [J]%MOD。 18 } 19 } 20 } 21 リターンC。 22 } 23マットPOW(マットX、LLのY)// 矩阵快速幂 24 { 25 マットANS =E; 26 一方、(Y){ 27 であれば(Y&1)ANS = ムル(ANS、X)。 28 X = ムル(X、X)。 29 Y >> = 1 。 30 } 31の リターン ANS。