1189:Pell数列
时间限制: 1000 ms 内存限制: 65536 KB
提交数:51680 通过数: 25888
【题目描述】
Pell数列a1,a2,a3,...𝑎1,𝑎2,𝑎3,...的定义是这样的,a1=1,a2=2,...,an=2an−1+an−2(n>2)𝑎1=1,𝑎2=2,...,𝑎𝑛=2𝑎𝑛−1+𝑎𝑛−2(𝑛>2)。
给出一个正整数k,要求Pell数列的第k项模上32767是多少。
【输入】
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数k (1≤k<1000000)。
【输出】
n行,每行输出对应一个输入。输出应是一个非负整数。
【输入样例】
2
1
8
【输出样例】
1
408
【原题链接】信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)https://ybt.ssoier.cn/problem_show.php?pid=1189根据给定的递推关系迭代计算序列值
#include<iostream> //包含输入输出流的头文件。
using namespace std; //使用 std 命名空间,避免每次使用输入输出函数时都需加上 std::。
long long a[1000001], n, tot;
int main()
{
cin >> tot; // 读取测试用例总数
a[1] = 1;
a[2] = 2;
// 使用递推关系计算序列值
for (int i = 3; i < 1000000; i++) {
a[i] = (2 * a[i - 1] + a[i - 2]) % 32767;
}
// 每个测试用例执行一次
while (tot--) {
cin >> n; // 读取每个测试用例的值
cout << a[n] << endl; // 输出计算得到的序列值
}
return 0;
}