#include<iostream> #include<cstdio> #include<cstring> #include<set> #include<queue> #include<vector> #include<map> using namespace std; #define ll long long int m[2][2],a,b,n,t[2][2]; int temp[2][2]; void power(int x) { if(x==0) { m[0][0]=m[1][1]=1; m[1][0]=m[0][1]=0; return ; } if(x==1) { m[0][0]=a%7; m[0][1]=b%7; m[1][0]=1; m[1][1]=0; return ; } power(x>>1); for(int i=0;i<=1;i++) { for(int j=0;j<=1;j++) { temp[i][j]=0; for(int k=0;k<=1;k++) { temp[i][j]=(temp[i][j]+(m[i][k]*m[k][j])%7)%7; } } } if(x&1) { for(int i=0;i<=1;i++) { for(int j=0;j<=1;j++) { m[i][j]=0; for(int k=0;k<=1;k++) { m[i][j]=(m[i][j]+(temp[i][k]*t[k][j])%7)%7; } } } } else { for(int i=0;i<=1;i++) { for(int j=0;j<=1;j++) { m[i][j]=temp[i][j]; } } } for(int i=0;i<=1;i++) { for(int j=0;j<=1;j++) { m[i][j]=m[i][j]%7; } } return ; } int main() { while(scanf("%d%d%d",&a,&b,&n),a||b||n) { t[0][0]=a%7; t[0][1]=b%7; t[1][0]=1; t[1][1]=0; if(n==1||n==2) { printf("1 "); continue; } else { power(n-2); printf("%d ",(m[0][0]+m[0][1])%7); } } return 0; }
鸣谢https://blog.csdn.net/cambridgeacm/article/details/7703809