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 }

 

posted @ 2016-07-11 17:18  Memoryヾノ战心  阅读(4207)  评论(0编辑  收藏  举报