HDU2256(矩阵)
求(sqrt(2) + sqrt(3)) ^ 2n MOD 1024
强行盗图- -,这公式推得 。。
#include <iostream> #include <cstdio> using namespace std; const int mod=1024; struct Matri { int a[2][2]; }; Matri Mat; Matri Mul(const Matri &A,const Matri &B) { Matri c; for(int i=0; i<2; i++) { for(int j=0; j<2; j++) { c.a[i][j]=0; for(int k=0; k<2; k++) { c.a[i][j]+=A.a[i][k]*B.a[k][j]; c.a[i][j]%=mod; } } } return c; } Matri Pow(int n) { if(n==1) return Mat; else if(n&1) { return Mul(Mat,Pow(n-1)); } else { Matri temp=Pow(n>>1); return Mul(temp,temp); } } int main() { int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); Mat.a[0][0] = 5; Mat.a[0][1] = 12; Mat.a[1][0]= 2; Mat.a[1][1] = 5; Matri tt; tt = Pow(n); int ans = (tt.a[0][0]*2 - 1)%mod; printf("%d\n",ans); } return 0; }