再水一发
加了个 %3 障眼法
#include <cstdio>
#define lp(i,j,k) for(int i = j;i <= k;++i)
struct MATRIX {
int a[3][3];
MATRIX(int x){a[1][1] = a[2][2] = x;a[1][2] = a[2][1] = 0;}
MATRIX operator * (const MATRIX &b) {
MATRIX re(0);
lp(i,1,2)
lp(j,1,2)
lp(k,1,2)
re.a[i][j] = (re.a[i][j] + a[i][k] * b.a[k][j]) % 3;
return re;
}
}m(0);
int n;
int ksm (MATRIX &n,int k) {
MATRIX p = m,re(1);
while(k) {
if(k & 1)
re = re * p;
p = p * p;
k >>= 1;
}
return re.a[1][1];
}
int main () {
m.a[1][1] = m.a[1][2] = m.a[2][1] = 1;
while(scanf("%d",&n) != EOF)
if(ksm(m,++n) == 0)
printf("yes\n");
else printf("no\n");
}
本文介绍了一种利用矩阵快速幂解决特定数学问题的方法。通过定义矩阵运算符重载及快速幂函数实现,可以高效地计算特定形式的矩阵的高次幂。此方法广泛应用于算法竞赛及数论问题中。
504

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



