矩阵快速幂

来源:互联网 发布:php 数组key长度限制 编辑:程序博客网 时间:2024/06/05 19:39

题目链接:点击打开链接

代码:

#include<iostream>#include<cmath>#include<cstdio>#include<sstream>#include<cstdlib>#include<string>#include<string.h>#include<cstring>#include<algorithm>#include<vector>#include<map>#include<set>#include<stack>#include<list>#include<queue>#include<ctime>#include<bitset>#define eps 1e-6#define INF 0x3f3f3f3f#define PI acos(-1.0)#define ll long long#define lson l,m,(rt<<1)#define rson m+1,r,(rt<<1)|1#define M 1000000007using namespace std;typedef struct{    int m[2][2];} Matrix;Matrix p;Matrix I= {1,0,0,1};Matrix matrixmul(Matrix a,Matrix b){    int i,j,k;    Matrix c;    for(i=0; i<2; i++)        for(j=0; j<2; j++)        {            c.m[i][j]=0;            for(k=0; k<2; k++)                c.m[i][j]+=(a.m[i][k]*b.m[k][j]);            c.m[i][j]%=7;        }    return c;}Matrix quickpow(ll n){    Matrix m=p,b=I;    while(n>=1)    {        if(n&1)            b=matrixmul(b,m);        n>>=1;        m=matrixmul(m,m);    }    return b;}int main(){    Matrix ans;    int n;    char a[100005];    while(~scanf("%s",a))    {        scanf("%d %d %d %d",&p.m[0][0],&p.m[0][1],&p.m[1][0],&p.m[1][1]);        n=0;        for(int i=0; a[i]; i++)        {            n=(n*10+(a[i]-'0'))%2016;        }        ans=quickpow(n);        printf("%d %d\n%d %d\n",ans.m[0][0],ans.m[0][1],ans.m[1][0],ans.m[1][1]);    }    return 0;}
先放着,明天研究。

0 0
原创粉丝点击