再水一发
加了个 %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");
}