贴个模板
#include <cstdio>
#include <cstring>
using namespace std;
int mat[2][2];
int fmat[32][2][2];
int tmp[2][2];
int e[2][2]={1,0,0,1};
int r[2][2];
void pre(){
memcpy(fmat,e,sizeof(e));
memcpy(fmat[1],mat,sizeof(mat));
for(int i=2; i<32; ++i){
for(int j=0; j<2; ++j){
for(int k=0; k<2; ++k){
int tt=0;
for(int l=0; l<2; ++l){
tt+=fmat[i-1][j][l]*fmat[i-1][l][k]; tt%=3;
}
tmp[j][k]=tt;
}
}
memcpy(fmat[i],tmp,sizeof(tmp));
}
}
int main(){
int a=1,b=1,n; //a b 可以自己设。
while(~scanf("%d",&n)){
memcpy(r,e,sizeof(e));
n-=1;
mat[0][1]=1;
mat[1][0]=b;
mat[1][1]=a;
pre();
int cnt=1<<30;
int id=31;
if(n==-1||n==0){
printf("no/n");
fflush(stdout);
}
else{
while(n>0){
if(n>=cnt){
n-=cnt;
for(int i=0; i<2; ++i)
for(int j=0; j<2; ++j){
int temp=0;
for(int k=0; k<2; ++k)
temp+=r[i][k]*fmat[id][k][j];
temp%=3;
tmp[i][j]=temp;
}
memcpy(r,tmp,sizeof(tmp));
}
--id;
cnt>>=1;
}
//printf("%d/n",(tmp[1][0]+tmp[1][1])%7);
if((tmp[1][0]*7+tmp[1][1]*11)%3==0)
printf("yes/n");
else
printf("no/n");
fflush(stdout);
}
}
}