G1.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int a, b, n;
  4. int flag[67] = {0}; //mod7 很有意思,最多有 7 * 7种情况吧,找循环结构
  5. // 十位数是本位,个位数是上一位,方便操作
  6. int f[100] = {0};
  7. int main()
  8. {
  9. while(scanf("%d%d%d", &a, &b, &n))
  10. {
  11. int Begin = 100;
  12. int length = 0;
  13. memset(flag, 0, sizeof(flag));
  14. memset(f, 0, sizeof(f));
  15. if(a == 0 && b == 0 && n == 0) break;
  16. f[1] = 1;
  17. f[2] = 1;
  18. for(int i = 3; i <= 100; i++)
  19. {
  20. if(i < Begin)
  21. {
  22. int ans = ((a * f[i - 1]+ b * f[i - 2]) % 7 )* 10 + f[i - 1];
  23. if(flag[ans] == 0)
  24. flag[ans] = i;
  25. else
  26. {
  27. Begin = flag[ans];
  28. length = i - flag[ans];
  29. }
  30. f[i] = ans / 10;
  31. }
  32. else
  33. break;
  34. }
  35. if(n < Begin)
  36. printf("%d\n", f[n]);
  37. else
  38. printf("%d\n", f[(n - Begin) % length + Begin]);
  39. }
  40. return 0;
  41. }