hrbust 2190 矩阵快速幂模板

来源:互联网 发布:2016年交通事故数据 编辑:程序博客网 时间:2024/05/28 15:43
#include <cstdio>#include <cstring>#include<stack>using namespace std;struct node{    int a[4][4];};int n,m;node cc(node a,node b){    node c;    memset(c.a,0,sizeof(c.a));    for(int i=0; i<2; i++)        for(int j=0; j<2; j++)            for(int k=0; k<2; k++)            {                c.a[i][j]+=a.a[i][k]*b.a[k][j];                c.a[i][j]%=m;            }    return c;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&n,&m);        //printf("%d %d",n,m);        node a;        a.a[0][0]=1,a.a[0][1]=1,a.a[1][0]=1,a.a[1][1]=0;        node c;        memset(c.a,0,sizeof(c.a));        for(int i=0; i<2; i++)            c.a[i][i]=1;        while(n)        {            if(n%2==1)            {                c=cc(a,c);            }            n/=2;            a=cc(a,a);        }       int sum=c.a[0][1];        printf("%d\n",sum);    }}

0 0