Openjudge-NOI题库-Pell数列
- 题目描述 Description
Pell数列a1, a2, a3, ...的定义是这样的,a1 = 1, a2 = 2, ... , an = 2 * an − 1 + an - 2 (n > 2)。
给出一个正整数k,要求Pell数列的第k项模上32767是多少。
- 输入输出格式 Input/output
- 输入:
- 第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数k (1 ≤ k < 1000000)。
- 输出:
- n行,每行输出对应一个输入。输出应是一个非负整数。
- 输入输出样例 Sample input/output
样例测试点#1
- 输入样例:
- 2
- 1
- 8
- 输出样例:
- 1
- 408
- 思路:这题可以不用递归来做,直接存入一个数组,模拟一下过程就可以
- 代码如下:
1 #include<stdio.h> 2 int pell[1000001];//要开得足够大 3 int main() 4 { 5 int k,n,i,j; 6 scanf("%d",&n); 7 for(j=1;j<=n;j++) 8 { 9 scanf("%d",&k); 10 pell[1]=1; 11 pell[2]=2; 12 for(i=3;i<=k;i++)//从第三位开始模拟 13 { 14 pell[i]=pell[i-2]+2*pell[i-1];//an=2*an-1+an-2 15 pell[i]%=32767;//每次都对这个数列中的数取余,防止过大 16 } 17 printf("%d\n",pell[k]);//输出第k个结果即可 18 } 19 }
我不怕千万人阻挡,只怕自己投降…