【信息奥赛题解】Pell数列(详细分析题解 & C++ 代码)

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)icon-default.png?t=N7T8https://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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值