1.链接地址:
http://bailian.openjudge.cn/practice/2786
2.题目:
- 总Time Limit:
- 3000ms
- Memory Limit:
- 65536kB
- Description
- Pell数列a1, a2, a3, ...的定义是这样的,a1 = 1, a2 = 2, ... , an = 2 * an − 1 + an - 2 (n > 2)。
给出一个正整数k,要求Pell数列的第k项模上32767是多少。- Input
- 第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数k (1 ≤ k < 1000000)。
- Output
- n行,每行输出对应一个输入。输出应是一个非负整数。
- Sample Input
2 1 8- Sample Output
1 408
3.思路:
打表法,求出可能结果
4.代码:
1 #include <iostream> 2 #include <cstdio> 3 4 #define MAX 1000000 5 #define MODE_NUM 32767 6 7 using namespace std; 8 9 10 int arr_pell[MAX]; 11 12 int main() 13 { 14 //freopen("C://input.txt","r",stdin); 15 16 int i; 17 18 arr_pell[0] = 1; 19 arr_pell[1] = 2; 20 for(i = 2; i < MAX; ++i) arr_pell[i] = (2 * arr_pell[i - 1] + arr_pell[i - 2]) % MODE_NUM; 21 22 int n; 23 cin >> n; 24 25 int k; 26 while(n--) 27 { 28 cin >> k; 29 cout << arr_pell[k - 1] << endl; 30 } 31 32 return 0; 33 }