這篇文章主要為大家展示了“SpringBoot中Fibonacci數(shù)列的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“SpringBoot中Fibonacci數(shù)列的示例分析”這篇文章吧。
成都服務(wù)器托管,創(chuàng)新互聯(lián)提供包括服務(wù)器租用、成都多線服務(wù)器托管、帶寬租用、云主機、機柜租用、主機租用托管、CDN網(wǎng)站加速、域名與空間等業(yè)務(wù)的一體化完整服務(wù)。電話咨詢:18980820575
對于這個問題,拿到手,馬上想到的是:先求Fibonacci數(shù)列,再求余數(shù)。但是極其不建議這樣暴力計算。因為當(dāng)n很大時,計算時間較長,還可能發(fā)生數(shù)值溢出的情況!
所以,這里給出另外一種思路:間接方式求余數(shù)
首先,科普一個求余公式:(a+b)% c = (a%c+b%c)%c
這個式子不難理解,可以代值進去試試看。
所以,不難得出:f(n)%m = [f(n-1)+f(n-2)]%m = [f(n-1)%m+f(n-2)%m]%m
由題目可知,最終求f(n)%m,因此令:g(n)=f(n)%m,其中m=10007。
于是求余遞推公式為:g(n)=[g(n-1)+g(n-2)]%m
其中,m=10007,g(1)=g(2)=1%m=1
完整代碼如下:
#includeusing namespace std;int main(){ int f1=1,f2=1;int temp=0; //中間變量int output=0; //輸出long n=0; //初始化輸入 cin>>n;if(n==1||n==2){ output=1; //當(dāng)n=1或2時,輸出為1} else{ for(int i=3;i<=n;i++){ temp=f2; f2=(f1+f2)%10007; //當(dāng)n大于2時,遞推計算 f1=temp;} output=f2;} cout<