T1202. Pell数列

 题目描述

Pell数列a_1,a_2,a_3,...a_1,a_2,a_3,...的定义是这样的,a_1=1,a_2=2,...,a_n=2a_n−1+a_n−2(n>2)a_1=1,a_2=2,...,a_n=2a_n−1+a_n−2(n>2)。

给出一个正整数 kk,要求Pell数列的第 kk 项模上 3276732767 是多少。

输入

第1行是测试数据的组数 nn,后面跟着 nn 行输入。每组测试数据占 11 行,包括一个正整数k(1≤k<1000000)k(1≤k<1000000)。

输出

nn 行,每行输出对应一个输入。输出应是一个非负整数。

样例

输入数据 1

2
1
8

Copy

输出数据 1

1
408

Copy

来源

一本通在线评测

C

#include <stdio.h>

int main() {
    int n; // 测试数据的组数
    scanf("%d", &n);

    int k_values[n]; // 存储每组的 k 值
    for (int i = 0; i < n; i++) {
        scanf("%d", &k_values[i]); // 读取每组的 k 值
    }

    int max_k = 0;
    for (int i = 0; i < n; i++) {
        if (k_values[i] > max_k) {
            max_k = k_values[i]; // 找到最大的 k 值
        }
    }

    int pell[max_k + 1]; // 创建一个数组来存储 Pell 数列
    pell[1] = 1; // 第 1 项
    pell[2] = 2; // 第 2 项

    // 计算 Pell 数列的值
    for (int i = 3; i <= max_k; i++) {
        pell[i] = (2 * pell[i - 1] + pell[i - 2]) % 32767; // 使用模 32767
    }

    // 输出对应的 Pell 数列项
    for (int i = 0; i < n; i++) {
        printf("%d\n", pell[k_values[i]]);
    }

    return 0;
}

C++

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n; // 测试数据的组数
    cin >> n;

    vector<int> pell(1000000); // 用于存储 Pell 数列的前 1,000,000 项
    pell[1] = 1; // 第 1 项
    pell[2] = 2; // 第 2 项

    // 计算 Pell 数列的前 1,000,000 项
    for (int i = 3; i < 1000000; ++i) {
        pell[i] = (2 * pell[i - 1] + pell[i - 2]) % 32767; // 使用模 32767
    }

    // 处理每组测试数据
    while (n--) {
        int k;
        cin >> k; // 读取 k
        cout << pell[k] << endl; // 输出对应的 Pell 数列项
    }

    return 0;
}

Python、

def pell_numbers(max_k):
    pell = [0] * (max_k + 1)  # 创建一个数组来存储 Pell 数列
    pell[1] = 1  # 第 1 项
    pell[2] = 2  # 第 2 项

    # 计算 Pell 数列的值
    for i in range(3, max_k + 1):
        pell[i] = (2 * pell[i - 1] + pell[i - 2]) % 32767  # 使用模 32767

    return pell

def main():
    n = int(input())  # 读取测试数据的组数
    k_values = [int(input()) for _ in range(n)]  # 读取每组的 k 值

    max_k = max(k_values)  # 找到最大的 k 值
    pell = pell_numbers(max_k)  # 计算 Pell 数列

    # 输出对应的 Pell 数列项
    for k in k_values:
        print(pell[k])

if __name__ == "__main__":
    main()

猜你喜欢

转载自blog.csdn.net/qq_73454087/article/details/142906856