題目連結:
給定一正整數 n ( 0 ≦ n ≦ 2, 000, 000, 000 ),求(2+√3) ^ n 的整數部分之末三位。若不足三位長,請補足前導 0 。
0
1
2
3
10
123456789
001
003
013
051
173
451
關於這題有個不錯的性質:設(2 + √3) ^ n = a + b√3 (a、b ∈ ? ),則 (2 + √3) ^ n 之整數部分便為 2a - 1 。
以下為證明:
我們可以假設以下兩式,而一式中的 Z 即是題目想要求的整數部分
再將兩式相加,得到
而因為等號左邊為一正整數,因此右邊也為一正整數。且因 0 < c、c’ < 1,所以 c + c’ 必等於 1 ( Z 本來已經就是正整數)。於是
得證。
有了以上的背景知識後,那要怎麼快速得到 a + b√3 中的 a 呢?觀察以下關係式:
已知(2 + √3) ^ n = x+y√3
則(2 + √3) ^ (n + 1) = (2x+3y) + (x+2y)√3
轉成矩陣相乘的形式即為:
設以上的 x = 1 、 y = 0,在左邊乘一個上式最左邊的矩陣(以下稱矩陣 A )得到2 + √3);再乘一個 A ,得到 7+4√3;乘 n 個 A ,得到(2 + √3) ^ n 。
然後,再套用矩陣快速冪的概念(本人的
這篇文章有提到),並在相乘的時候取 1, 000 的餘數。這樣便可快速得到(2 + √3) ^ n = a + b√3 中的 a、b 。
最後,算出 2a - 1 之後,再取 1, 000 的餘數即是所求。(注意數字的長度,可能不足三位長,這時要在前面補 0 )
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。