1. 将所有Lucky Number按照(4,4),(4,7),(7,4),(7,7)分类,分别计算不重复的数的个数存于矩阵中:
---------------
| (4,4) | (4,7) |
--------------- ====> A
| (7,4) | (7,7) |
---------------
2. 求长度为length的Lucky Sequence的个数。这里应用矩阵乘法即可达到求解的目的。
(如:(4,4) = (4,4)*(4,4) + (4,7)*(7,4))
length = 1: return A
length = 2: return A * A
......
length = n: return A*A*...*A (即A^n)
若length为偶数:
A*A*A*...*A => (A*A)*(A*A)*...*(A*A)
=> (A^2)*(A^2)*...*(A^2)
=> (A^4)*(A^4)*...*(A^4)
=> ......
=> (A^(n/2)) * (A^(n/2))
=> A^n
若length为奇数:
A*A*A*...*A => A*(A*A*A*...*A) => ...
=> A*(A^((n-1)/2) * A^((n-1)/2))
由此可得:
2 if(k == 0) {
3 //单位矩阵
4 long[,] res = new long[2,2];
5 res[0,0] = 1;
6 res[1,1] = 1;
7 return res;
8 }
9 if(k % 2 == 0) {
10 return pow(mul(a,a), k/2);
11 } else {
12 return mul(a, pow(a, k-1));
13 }
14}
15// long[,] mul(long[,], long[,]);// 矩阵乘法
用矩阵乘法来求解,code能写的非常漂亮。可惜,“我只猜中了故事开头,却没猜到故事的结局”。