-1
的問題是獲得在1,000,000,000,000,000,000th Fibonacci數%百萬
1 000 000 000 000 000 000個Fibonacci數
#include <iostream>
#define fibo(a,b) {long long c=b;b=a;a=(b+c)%1000000;}
using namespace std;
int main(){
long long a=1,b=0; //two num
long long pa,pb,n,k,arr[2][1000]; //last two num,input,input<=2^k
cin>>n;
arr[0][0]=n/2;arr[1][0]=n%2;
for(unsigned long long i=1;n>3;i++){
arr[0][i]=arr[0][i-1]/2;
arr[1][i]=arr[0][i-1]%2;
if(arr[0][i]==1){
k=i;
break;
}
}
if(n<=3){ //special occasions
switch(n){
case 0:cout<<"0"<<endl;break;
case 3:cout<<"2"<<endl;break;
default:cout<<"1"<<endl;
}
return 0;
}
while(k>=0){ //calc
pa=a;pb=b;
a=((pa+pb*2)*pa)%1000000; //F(2n)=(F(n)+F(n-1)*2)*F(n)
b=(pa*pa+pb*pb)%1000000; //F(2n-1)=F(n)^2+F(n-1)^2
if(arr[1][k--]==1){fibo(a,b);} //F(n+1)=F(n)+F(n-1)
}
cout<<a<<endl;
return 0;
}
當它錯了嗎? 爲什麼它錯了?
我找不到不同的場合。
第n個斐波納契數有一個[封閉形式方程](https://en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression) - 沒有必要全部計算它們。 –
感謝回答,但我需要整數,而不是浮動 – stoad
這是第n個斐波納契數的公式,一個非常定義的整數。我完全不知道你的評論意味着什麼。 –