Pell数列a
1
, a
2
, a
3
, ...的定义是这样的,a
1
= 1, a
2
= 2, ... , a
n
= 2 * a
n − 1
+ a
n - 2
(n > 2)。
给出一个正整数k,要求Pell数列的第k项模上32767是多少。
给出一个正整数k,要求Pell数列的第k项模上32767是多少。
-
Input
- 第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数k (1 ≤ k < 1000000)。 Output
- n行,每行输出对应一个输入。输出应是一个非负整数。 Sample Input
2 1 8
-
Sample Output
1 408
很简单,只是要注意存入数组的不应是pell数列(过大),而是其取模后的数字,用此数字算出的后续取模数列也是正确的
#define _CRT_SECURE_NO_WARNINGS
#include
long long ans[1000005] = { 1, 2 };
int main()
{
int n;
scanf("%d", &n);
while (n--)
{
int k;
scanf("%d", &k);
for (int i = 2; i < k; i++)
{
ans[i] = ans[i - 2] + 2 * ans[i - 1];
ans[i] %= 32767; //此处
}
printf("%lld\n", ans[k-1]);
}
return 0;
}