最近開始由線段樹轉移新的內容,線段樹學到掃瞄線這裡有點迷迷糊糊的,有時候放一放可能會好一些。
最近突然對各種數學問題很感興趣。好好鑽研了一下矩陣快速冪。發現矩陣真是個計算神器,累乘類的運算原本要o(n)的複雜度一下子給降到log(n),非常大的進步了。
這個題目算是矩陣快速冪的比較難推的乙個題目。題目要求 (sqrt(2)+sqrt(3))的 2^n並%1024,要求出值來並不難,構造矩陣即可,但是要mod1024就有問題了,小數不能直接mod,但是如果你取整之後再mod,結果絕逼出問題,因為浮點數的精度問題。
所以從斌牛的部落格上看到如此推算,推算第一塊不難,而且很容易求出xn 和 yn,但是問題又出來了,要是求出來後,直接用(int)(xn+yn*sqrt(6))%1024,又會出問題,還是浮點數取整問題,我一開始就這麼算的,導致結果奇葩。看來在mod的時候有浮點數要格外注意,直接處理的話,不管怎麼取整,都會出問題。
所以分割線下面的推算就避開了這個問題,這個確實好難想到,通過變換一下,得到最終的結果必定是2xn-(0.101...)^n,因為最終mod是用不大於浮點數的最大整數在mod,所以最終結果就是2xn-1.第二條確實好難想到!
#include #include#include
#include
#include
using
namespace
std;
struct
mat;
mat e,a;
mat
operator *(mat a,mat b)
returnc;}
mat
operator ^(mat ac,int
x)
returnc;}
void
init()
intmain()
return0;
}
HDU 2256 矩陣快速冪 帶根號的遞推
題意 求 sqrt sqrt mod 1024 分析 把指數的2帶入 原式等於 5 2 sqrt n 有乙個重要的結論是n次運算後其結果最終形式也是 a n b n sqrt 的形式 記最終的解 f n a n b n sqrt f n 1 a b sqrt frac 5 2 sqrt f n 5 ...
hdu 2256 好神奇的矩陣!
這題自己一開始硬是不會處理 6 前面的係數,直到看了別人的部落格後才知道是怎麼解得,不多說,先付上一張圖 推出這個關係後,就很容易了。1 include2 include3 typedef long long ll 4 const int mod 1024 5 6struct matrix 9 ma...
hdu 4965 矩陣快速冪
給定兩個矩陣a,b,分別為n k和k n 求出矩陣c a b,矩陣m c n n 將矩陣m中的所有元素取模6,得到新矩陣m 並計算矩陣m 中所有元素的和 注意到ba 得到 6 6,而ab 得到1000 1000 轉化乘法算式為 m abababab.a ba n n 1 b 直接用矩陣快速冪即可 i...