fork(6) download
  1. #include <cstdio>
  2. const int mod = 9901;
  3. int m[6][6] = { 1, 2, 6, 1, 0, -1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, a[6][6], b[6][6], r[6][6];
  4. int v[6] = { 170, 62, 23, 10, 3, 1 };
  5. int main() {
  6. int T, n;
  7. for (scanf("%d", &T); T--;) {
  8. scanf("%d", &n);
  9. if (n == 0) printf("0\n");
  10. if (n == 1) printf("1\n");
  11. if (n == 2) printf("3\n");
  12. if (n == 3) printf("10\n");
  13. if (n == 4) printf("23\n");
  14. if (n == 5) printf("62\n");
  15. if (n == 6) printf("170\n");
  16. if (n >= 7) {
  17. bool first = true;
  18. n -= 6;
  19. for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) a[i][j] = r[i][j] = m[i][j];
  20. while (n) {
  21. if (n & 1) {
  22. if (first) {
  23. first = false;
  24. for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) r[i][j] = a[i][j];
  25. }
  26. else {
  27. for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) b[i][j] = 0;
  28. for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) for (int k = 0; k < 6; k++) b[i][j] = (b[i][j] + a[i][k] * r[k][j]) % mod;
  29. for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) r[i][j] = b[i][j];
  30. }
  31. }
  32. for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) b[i][j] = 0;
  33. for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) for (int k = 0; k < 6; k++) b[i][j] = (b[i][j] + a[i][k] * a[k][j]) % mod;
  34. for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) a[i][j] = b[i][j];
  35. n /= 2;
  36. }
  37. int res = 0;
  38. for (int i = 0; i < 6; i++) res = (res + r[0][i] * v[i]) % mod;
  39. printf("%d\n", (res + mod) % mod);
  40. }
  41. }
  42. }
Success #stdin #stdout 0s 3344KB
stdin
3
1
2
3
stdout
1
3
10