解题思路:





注意事项:矩阵的乘法





参考代码:

#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;

}


点赞(1)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论