- 題目描述 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 }