codevs1281 Xn數列,矩陣乘法練習

2021-07-09 22:56:34 字數 853 閱讀 1819

時間限制: 1 s

空間限制: 128000 kb

題目等級 : 大師 master

題解 題目描述 description

給你6個數,m, a, c, x0, n, g

xn+1 = ( axn + c ) mod m,求xn

m, a, c, x0, n, g<=10^18

輸入描述 input description

一行六個數 m, a, c, x0, n, g

輸出描述 output description

輸出乙個數 xn mod g

樣例輸入 sample input

11 8 7 1 5 3

樣例輸出 sample output

2資料範圍及提示 data size & hint

int64按位相乘可以不要用高精度。

寫在前面:數論!數論!

思路:

轉移矩陣:

初始矩陣:

要加乙個無聊的乘法優化,要不會炸longlong

#include

#define ll long long

using namespace std;

ll m,a,c,x

0,n,g;

struct matrix

};ll cheng(ll x,ll y)//乘法優化,參照快速冪

return ans;

}matrix mul(matrix x,matrix y)//矩陣乘法

main()

printf("%lld",ans.map[1][1]%g);

}

Codevs 1281 Xn數列 題解

其實這題看一下資料範圍就知道用o n 的是絕對不行的,於是咱們換到log級的 再一看,運算形式還是快速取模的運算,那麼就一定會在快速冪 矩陣快速冪 快速乘法中選擇 顯然,這題並沒有涉及到快速冪 再一看,括號裡有加法,於是很快的我們就可以確定這是矩陣快速冪 再一看資料範圍,int64 long lon...

wikioi 1281 Xn數列(矩陣乘法)

矩陣真是個神奇的東西。只要搞出乙個矩陣乘法,那麼遞推式可以完美的用上快速冪,然後使複雜度降到log 真是神奇。在本題中,應該很快能得到下邊的矩陣 a,0 xn,c xn 1,c 1,1 那麼我要要乘n次,也就是說要乘n個 a,0 1,1 因為是個方陣,所以可以用快速冪 我們先用快速冪算出n個這個2 ...

Xn數列 矩陣乘法 慢速乘法

題目描述 description 給你6個數,m,a,c,x0,n,g xn 1 axn c mod m,求xn m,a,c,x0,n,g 10 18 輸入描述 input description 一行六個數 m,a,c,x0,n,g 輸出描述 output description 輸出乙個數 xn...