问题标题: 酷町堂:Fibonacci 第 n 项

0
0
杨赟安
杨赟安
初级守护
初级守护

大家都知道 Fibonacci 数列吧,�1=1f1​=1,�2=1f2​=1,�3=2f3​=2,�4=3f4​=3,……,��=��−1+��−2fn​=fn−1​+fn−2​。

现在问题很简单,输入 �n 和 �m,求 ��mod�fn​modm。

#include<bits/stdc++.h>
using namespace std;
string dp[110];
int a[110],b[110],c[110];
string s(string s1,string s2){
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    int al=s1.size(),bl=s2.size(),cl=max(al,bl)+1;
    for(int i=1;i<=al;i++) a[i]=s1[al-i]-'0';
    for(int i=1;i<=bl;i++) b[i]=s2[bl-i]-'0';
    for(int i=1;i<=cl;i++){
        c[i]+=a[i]+b[i];
        c[i+1]=c[i]/10;
        c[i]%=10;
    }
    while(c[cl]==0&&cl>1){
        cl--;
    }               
    string s3;
    for(int i=cl;i>=1;i--){
        s3+=c[i]+'0';
    }        
    return s3;   

int main(){
    int n;
    cin>>n;
    dp[1]="1";
    dp[2]="1";
    for(int i=3;i<=n;i++){
        dp[i]=s(dp[i-1],dp[i-2]);
    }
    cout<<dp[n];
    return 0; 
}


1
岳梓航
岳梓航
新手守护
新手守护

这个要用矩阵快速幂,你这妥妥的TLE

我要回答