border="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=421934564&auto=1&height=66">
6/1000
题解
看到题的第一眼是想些矩阵乘法+快速幂来着…但是发现模数好小
然后发现一共最多就49种情况…于是愉快的找一下圈就行了
感觉自己写的有一点复杂QAQ
不过还好
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int f[10][10];
int main()
{
//freopen("in.txt","r",stdin);
int a,b,n;
while(scanf("%d%d%d",&a,&b,&n),a||b||n){
memset(f,-1,sizeof(f));
int x=1,y=1,nx,ny,cnt=0,cir;
while(1){
ny=(a*y+b*x)%7;
nx=y;
if(f[nx][ny]!=-1)break;
f[nx][ny]=++cnt;
x=nx;y=ny;
}
cir=f[x][y]-f[nx][ny]+1;
x=y=1;
for(int i=3;i<=n;i++)
{
int tmp=(a*y+b*x)%7;
x=y;y=tmp;
if((x==nx)&&(y==ny))n=i+(n-i)%cir;
}
printf("%d\n",y);
}
return 0;
}
以上。