/* * 比赛的时候卡了很久,一直找不到规律 * 一开我sb一样的打表的公式错了,经zed的数据我才改对 * 当打到15项的时候是发现 * F[n] = 2 * F[n - 1] - 2 if(n % 2 == 0) else 2 * F[n - 1] - 1 * 赛后xwc 说可以矩阵乘法,比赛的时候感觉要奇偶讨论很麻烦,其实很简单的,又学了一招 * F[n] = 4 * F[n - 2] - 5 if(n % 2 == 1) else 2 * F[n - 2] - 4 */ #include <iostream> #include <cstdio> using namespace std; int a[20000]; int main() { a[1] = 2; a[2] = 2; for (int i = 3; i <= 10010; i++) { if (i % 2 == 1) { a[i] = a[i - 1] + a[i - 1] - 1; a[i] %= 10007; if (a[i] < 0) { a[i] += 10007; } } else { a[i] = a[i - 1] + a[i - 1] - 2; a[i] %= 10007; if (a[i] < 0) { a[i] += 10007; } } } //printf("%d %d %d", a[10007], a[10008], a[10009]); int t, n; scanf("%d", &t); for (int i = 1; i <= t; i++) { scanf("%d", &n); if (n <= 10006) {//这里要特别注意 printf("Case #%d: %d/n", i, a[n] % 10007); } else { n = n % 10006; printf("Case #%d: %d/n", i, a[n] % 10007); } } }