第一次写矩阵的题目,第一次写快速幂的题目,第一次进行移位操作,第一次进行按位与操作
//#define LOCAL
#include <stdio.h>
#include <string.h>
#define MAXN 20 + 10
int n;
int a11, a12, a21, a22;
int b11, b12, b21, b22;
int c11, c12, c21, c22;
int d11, d12, d21, d22;
int main()
{
#ifdef LOCAL
freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
while(~scanf("%d", &n) && n != -1)
{
// 数据初始化
a11 = 1;
a12 = 1;
a21 = 1;
a22 = 0;
b11 = 1;
b12 = 0;
b21 = 0;
b22 = 1;
// 算法主体
if(n == 0)
{
printf("0\n");
continue;
}
while(n)
{
if(n & 1)
{
c11 = (a11 * b11 + a12 * b21) % 10000;
c12 = (a11 * b12 + a12 * b22) % 10000;
c21 = (a21 * b11 + a22 * b21) % 10000;
c22 = (a21 * b12 + a22 * b22) % 10000;
b11 = c11;
b12 = c12;
b21 = c21;
b22 = c22;
}
d11 = (a11 * a11 + a12 * a21) % 10000;
d12 = (a11 * a12 + a12 * a22) % 10000;
d21 = (a21 * a11 + a22 * a21) % 10000;
d22 = (a21 * a12 + a22 * a22) % 10000;
a11 = d11;
a12 = d12;
a21 = d21;
a22 = d22;
n >>= 1;
}
printf("%d\n", b12);
}
return 0;
}
本文详细介绍了作者在编程实践中初次接触矩阵运算、快速幂算法、位操作及移位操作的过程。通过实例演示了如何高效计算矩阵的幂次,并深入理解了位运算在优化算法中的应用。
4110

被折叠的 条评论
为什么被折叠?



