关于董永键老师一本通书的裴波那契数列你能做到哪一个?
反正我是没做完。
1071:菲波那契数
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 18129 通过数: 9498
【题目描述】
菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。
【输入】
输入一行,包含一个正整数k。(1 ≤ k ≤ 46)
【输出】
输出一行,包含一个正整数,表示菲波那契数列中第k个数的大小。
【输入样例】
19
【输出样例】
4181
1159:斐波那契数列
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 7019 通过数: 4962
【题目描述】
用递归函数输出斐波那契数列第n项。0,1,1,2,3,5,8,13……
【输入】
一个正整数n,表示第n项。
【输出】
第n项是多少。
【输入样例】
3
【输出样例】
1
1188:菲波那契数列(2)
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 8702 通过数: 3136
【题目描述】
菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。
给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。
【输入】
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 ≤ a ≤ 1000000)。
【输出】
n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中第a个数对1000取模得到的结果。
【输入样例】
4
5
2
19
1
【输出样例】
5
1
181
1
1201:菲波那契数列
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 5051 通过数: 3014
【题目描述】
菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。
给出一个正整数a,要求菲波那契数列中第a个数是多少。
【输入】
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1≤a≤20)。
【输出】
输出有n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中第a个数的大小。
【输入样例】
4
5
2
19
1
【输出样例】
5
1
4181
1
1642: 【例 2】Fibonacci 第 n 项
时间限制: 1000 ms 内存限制: 524288 KB
提交数: 75 通过数: 22
【题目描述】
大家都知道 Fibonacci 数列吧,f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2 。
现在问题很简单,输入 nn 和 mm,求 fnmodmfnmodm。
【输入】
输入 n,mn,m。
【输出】
输出 fnmodmfnmodm。
【输入样例】
5 1000
【输出样例】
5
【提示】
数据范围与提示:
对于 100% 的数据, 1≤n≤2×109,1≤m≤109+10。
1643:【例 3】Fibonacci 前 n 项和
时间限制: 1000 ms 内存限制: 524288 KB
提交数: 34 通过数: 22
【题目描述】
大家都知道 Fibonacci 数列吧,f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2 。
现在问题很简单,输入 nn 和 mm,求 {fn}{fn} 的前 nn 项和 SnmodmSnmodm。
【输入】
输入 n,mn,m。
【输出】
输出前 nn 项和 SnmodmSnmodm。
【输入样例】
5 1000
【输出样例】
12
【提示】
数据范围与提示:
对于 100% 的数据, 1≤n≤2×109,1≤m≤109+10。
1644:【例 4】佳佳的 Fibonacci
时间限制: 1000 ms 内存限制: 524288 KB
提交数: 28 通过数: 13
【题目描述】
佳佳对数学,尤其对数列十分感兴趣。在研究完 Fibonacci 数列后,他创造出许多稀奇古怪的数列。例如用 S(n)S(n) 表示 Fibonacci 前 nn 项和 modmmodm 的值,即 S(n)=(F1+F2+...+Fn)modmS(n)=(F1+F2+...+Fn)modm,其中 F1=F2=1,Fi=Fi−1+Fi−2F1=F2=1,Fi=Fi−1+Fi−2 。可这对佳佳来说还是小菜一碟。
终于,她找到了一个自己解决不了的问题。用 T(n)=(F1+2F2+3F3+...+nFn)modmT(n)=(F1+2F2+3F3+...+nFn)modm 表示 Fibonacci 数列前 nn 项变形后的和 modmmodm 的值。
现在佳佳告诉你了一个 nn 和 mm,请求出 T(n)T(n) 的值。
【输入】
输入数据包括一行,两个用空格隔开的整数 n,mn,m。
【输出】
仅一行,T(n)T(n) 的值。
【输入样例】
5 5
【输出样例】
1
【提示】
样例解释
T(5)=(1+2×1+3×2+4×3+5×5)mod5=1T(5)=(1+2×1+3×2+4×3+5×5)mod5=1
数据范围与提示:
对于 30% 的数据,1≤n≤1000;
对于 60% 的数据,1≤m≤1000;
对于 100% 的数据,1≤n,m≤231−1
1645:Fibonacci
时间限制: 1000 ms 内存限制: 524288 KB
提交数: 35 通过数: 24
【题目描述】
原题来自:POJ 3070
我们知道斐波那契数列 F0=0,F1=1,Fn=Fn−1+Fn−2。
求 Fnmod104 。
【输入】
多组数据,每组数据一行,一个整数 nn。
输入以 −1−1 结束。
【输出】
对于每组数据,输出 Fnmod104 。
【输入样例】
0
9
999999999
1000000000
-1
【输出样例】
0
34
626
6875
【提示】
数据范围与提示:
对于全部数据,0≤n≤109
己解决部分程序代码
#include<iostream> using namespace std; int main(){ int k,a[50]; cin>>k; a[1]=1,a[2]=1; for(int i=3;i<=k;i++) a[i]=a[i-1]+a[i-2]; cout<<a[k]; return 0; }
#include<iostream> using namespace std; int fblq(int n) { if(n==1)return 0; if(n==2)return 1; return fblq(n-1)+fblq(n-2); } int main(){ int n; cin>>n; cout<<fblq(n); return 0; }
#include<iostream> using namespace std; int a[1000001],b[100]; int main(){ int n,max=0; cin>>n; for(int i=1;i<=n;i++) { cin>>b[i]; if(b[i]>max)max=b[i]; } a[1]=a[2]=1; for(int i=3;i<=max;i++) a[i]=(a[i-1]+a[i-2])%1000; for(int i=1;i<=n;i++)cout<<a[b[i]]<<' '; return 0; }
#include<iostream> using namespace std; int a[21],b[10000]; int main() { int n,max=0; cin>>n; for(int i=1;i<=n;i++) { cin>>b[i]; if(max<b[i])max=b[i]; } a[1]=1,a[2]=1; for(int i=3;i<=max;i++)a[i]=a[i-1]+a[i-2]; for(int i=1;i<=n;i++)cout<<a[b[i]]<<endl; return 0; }
#include<iostream> using namespace std; long long const mxn=20000011; long long n,m,a[mxn]; long long fb(long long n) { if(n==1||n==2)return 1; if(n>=mxn){ long long t1=fb(n/2)%m,t2; if(n%2)t2=fb(n/2+1)%m,t1=(t1*t1+t2*t2)%m; else t2=fb(n/2-1),t1=(t1*t1+2*t1*t2)%m; return t1; } else { if(a[n]==0) { long long t1=fb(n/2)%m,t2; if(n%2)t2=fb(n/2+1)%m,a[n]=(t1*t1+t2*t2)%m; else t2=fb(n/2-1),a[n]=(t1*t1+2*t1*t2)%m; } return a[n]; } } int main() { cin>>n>>m; cout<<fb(n); return 0; }