12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #include<bits/stdc++.h>
- using namespace std;
- int a, b, n;
- int flag[67] = {0}; //mod7 很有意思,最多有 7 * 7种情况吧,找循环结构
-
- // 十位数是本位,个位数是上一位,方便操作
-
- int f[100] = {0};
-
- int main()
- {
- while(scanf("%d%d%d", &a, &b, &n))
- {
- int Begin = 100;
- int length = 0;
- memset(flag, 0, sizeof(flag));
- memset(f, 0, sizeof(f));
- if(a == 0 && b == 0 && n == 0) break;
- f[1] = 1;
- f[2] = 1;
-
- for(int i = 3; i <= 100; i++)
- {
- if(i < Begin)
- {
- int ans = ((a * f[i - 1]+ b * f[i - 2]) % 7 )* 10 + f[i - 1];
- if(flag[ans] == 0)
- flag[ans] = i;
- else
- {
- Begin = flag[ans];
- length = i - flag[ans];
- }
- f[i] = ans / 10;
- }
- else
- break;
- }
-
- if(n < Begin)
- printf("%d\n", f[n]);
- else
- printf("%d\n", f[(n - Begin) % length + Begin]);
- }
- return 0;
- }
|