首页 > 编程知识 正文

斐波那契数列递归,斐波那契数列求和公式

时间:2023-05-05 00:31:15 阅读:195224 作者:1324

题意:给一个ymdc数,问是ymdc数列中的第几个,范围比较大是1到第1e5个ymdc数

题解:选几个大质数MOD一下,预处理出范围内的所有膜后的值,如果输入的数在取模后能够和某一项ymdc数的膜一一对应,那么他很大概率的就是它

#include <iostream>

#include <cstring>

#define ll long long

#define fio ios::sync_with_stdio(false);cin.tie(0)

const int N=2e5+5;

using namespace std;

int mod[]={10000019,99999721,10006333,1006277,10005559,99999787};

int a[N][6];

int main(){

    fio;

    for(int i=0;i<6;i++){

        a[1][i]=1,a[2][i]=2;

        for(int j=3;j<=100000;j++){

            a[j][i]=(a[j-1][i]+a[j-2][i])%mod[i];

        }

    }

    string str;

    ll cm[6];

    while(cin>>str){

        memset(cm,0,sizeof(cm));

        int len=str.length();

        for(int i=0;i<len;i++){

            for(int j=0;j<6;j++){

                cm[j]=(cm[j]*10+str[i]-'0')%mod[j];

            }

        }

        for(int i=1;i<=100000;i++){

            int flag=0;

            for(int j=0;j<6;j++){

                if(cm[j]!=a[i][j]){

                    flag=1;

                    break;

                }

            }

            if(flag==0){

                cout<<i<<endl;

                break;

            }

        }

    }

    return 0;

}

  

转载于:https://www.cnblogs.com/Mrleon/p/8683983.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。