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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM