码迷,mamicode.com
首页 > 其他好文 > 详细

EOJ 3506. 斐波那契数列

时间:2018-03-31 21:34:03      阅读:355      评论:0      收藏:0      [点我收藏+]

标签:ted   using   ios   blog   memset   long   iostream   ace   hash   

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

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

#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;

}

  

EOJ 3506. 斐波那契数列

标签:ted   using   ios   blog   memset   long   iostream   ace   hash   

原文地址:https://www.cnblogs.com/Mrleon/p/8683983.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!