藍橋杯 ADV 61 演算法提高 矩陣乘方

2021-09-01 09:20:11 字數 1057 閱讀 9104

問題描述

給定乙個矩陣a,乙個非負整數b和乙個正整數m,求a的b次方除m的餘數。

其中乙個nxn的矩陣除m的餘數得到的仍是乙個nxn的矩陣,這個矩陣的每乙個元素是原矩陣對應位置上的數除m的餘數。

要計算這個問題,可以將a連乘b次,每次都對m求餘,但這種方法特別慢,當b較大時無法使用。下面給出一種較快的演算法(用a^b表示a的b次方):

若b=0,則a^b%m=i%m。其中i表示單位矩陣。

若b為偶數,則a^b%m=(a^(b/2)%m)^2%m,即先把a乘b/2次方對m求餘,然後再平方後對m求餘。

若b為奇數,則a^b%m=(a^(b-1)%m)*a%m,即先求a乘b-1次方對m求餘,然後再乘a後對m求餘。

這種方法速度較快,請使用這種方法計算a^b%m,其中a是乙個2x2的矩陣,m不大於10000。

輸入格式

輸入第一行包含兩個整數b, m,第二行和第三行每行兩個整數,為矩陣a。

輸出格式

輸出兩行,每行兩個整數,表示a^b%m的值。

樣例輸入

2 2

1 10 1

樣例輸出

1 0

0 1

分析:1.用快速冪的解法遞迴下去即可

2.按照題目測試資料,矩陣的0次方,應該為全部數字為0, 矩陣的1次方,矩陣不變~

#include #include using namespace std;

int m;

vectormul(vectora, vectorb)

vectorf(vectorv, int b) else if (b == 1) else if (b % 2 == 0) else

}int main()

藍橋杯 ADV 208 演算法提高 矩陣相乘

問題描述 小明最近在為線性代數而頭疼,線性代數確實很抽象 也很無聊 可惜他的老師正在講這矩陣乘法這一段內容。當然,小明上課打瞌睡也沒問題,但線性代數的習題可是很可怕的。小明希望你來幫他完成這個任務。現在給你乙個ai行aj列的矩陣和乙個bi行bj列的矩陣,要你求出他們相乘的積 當然也是矩陣 輸入資料保...

藍橋杯 演算法提高 矩陣相乘

演算法提高 矩陣相乘 時間限制 1.0s 記憶體限制 256.0mb 提交此題 問題描述 小明最近在為線性代數而頭疼,線性代數確實很抽象 也很無聊 可惜他的老師正在講這矩陣乘法這一段內容。當然,小明上課打瞌睡也沒問題,但線性代數的習題可是很可怕的。小明希望你來幫他完成這個任務。現在給你乙個ai行aj...

藍橋杯 演算法提高 矩陣相乘

演算法提高 矩陣相乘 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小明最近在為線性代數而頭疼,線性代數確實很抽象 也很無聊 可惜他的老師正在講這矩陣乘法這一段內容。當然,小明上課打瞌睡也沒問題,但線性代數的習題可是很可怕的。小明希望你來幫他完成這個任務。現在給你乙個ai行aj列的矩陣和...