HDU2256(矩阵)

来源:互联网 发布:驾驶远程教育计时软件 编辑:程序博客网 时间:2024/06/06 04:02


求(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;}



0 0