水柔炎


私信TA

用户名:shuirouyan

访问量:19140

签 名:

等  级
排  名 599
经  验 4205
参赛次数 7
文章发表 28
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:





注意事项:矩阵的乘法





参考代码:

#include <stdio.h>

int b, m;

int a[2][2], ans[2][2], temp[2][2] = {1,1,1,1};

void play()

{

    int cnt, cnt2;

    for(cnt = 0; cnt < 2; ++cnt)

    {

        for(cnt2 = 0; cnt2 < 2; ++cnt2)

        {

            printf("%d ", ans[cnt][cnt2]);

        }      

        printf("\n");

    }  

}

void cp(int arr1[][2], int arr2[][2])

{

    int cnt, cnt2;

    

    for(cnt = 0; cnt < 2 ;++cnt)

        for(cnt2 = 0; cnt2 < 2; ++cnt2)

            arr1[cnt][cnt2] = arr2[cnt][cnt2];

}

void mod(int arr[][2])

{

    int cnt, cnt2;

    

    for(cnt = 0; cnt < 2; ++cnt)

        for(cnt2 = 0; cnt2 < 2; ++cnt2)

            arr[cnt][cnt2] %= m;

}

void fun2(int a[][2], int b[][2])

{

    int cnt, cnt2;

    

    temp[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0];

    temp[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1];

    temp[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0];

    temp[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1];

}

void fun(int arr[][2], int k)

{

    int cnt;

    

    if(k == 0)

    {

        mod(temp);

        cp(ans, temp);

        return;

    }

    

    if(k == 1)

    {

        mod(ans);

        

        return;

    }

    if(k == 2)

    {

        fun2(a, a);

        cp(ans, temp);

    //  printf("2\n");

    //  play();

        mod(ans);

        return;

    }

    if(k%2 == 0)

    {

        fun(arr, k/2);

        fun2(ans, ans);

        cp(ans, temp);

        //printf("=0\n");

        //play();

        

        mod(ans);

        return;

    }

    if(k%2 != 0)

    {

        fun(arr, k-1);

        fun2(ans, arr);

        cp(ans, temp);

        //printf("!=0\n");

    //  play();

        mod(ans);

        return;

    }

}

int main()

{

    int cnt, cnt2;

    

    scanf("%d%d", &b, &m);

    

    for(cnt = 0; cnt < 2; ++cnt)

        for(cnt2 = 0; cnt2 < 2; ++cnt2)

        {

            scanf("%d", &a[cnt][cnt2]);

            ans[cnt][cnt2] = a[cnt][cnt2];

        }

    

    fun(a, b);

    

    play();

    

    

    return 0;

}


 

0.0分

0 人评分

  评论区

  • «
  • »