3506. 斐波那契数列

Lani ·
更新时间:2024-09-20
· 918 次阅读

单点时限: 2.0 sec

内存限制: 256 MB

有一个数列 {An},其中 A1=1,A2=2,An+2=An+1+An。

给你一个数字,问他是这个数列的第几项。

每行包括数列中的一项 Ak (k≤100000)。

总行数 T≤100。

输入格式
Something like:

2
3
5
8
13
输出格式
Something like:

2
3
4
5
6
提示
Java 和 Python 姿势好不会 MLE,想暴力有一点点难度。

正解当然是 C++ 啦,开动脑筋。

注意是 k≤100000,不是 ak≤100000

/* 思路:费波纳杰数列到100000已经很大了,故找一个合适的p,使其每一项可以模。 */ #include #include #include using namespace std; const long long p = 19260817; long long flag[19260817]; int main() { flag[1]=1; flag[2]=2; long long a,b; a=1; b=2; for(int i = 3; i >s) { long long sum=0; for(int i = 0; i < s.size(); i++) { sum=(sum*10+s[i]-'0')%p; } cout<<flag[sum]<<endl; } return 0; } #利用python自带的hash更容易解决 flag = [0,1,2] for i in range(99998): t = a + b flag.append(hash(t)) a,b = b,t while True: try: print(flag.index(hash(int(input())))) except: break
作者:Q&Cui



斐波那契数列 斐波那契

需要 登录 后方可回复, 如果你还没有账号请 注册新账号