先上个最最朴素的小代码f[1]=1; f[2]=1; for(int i=3;i<=n;i++) f[i] = f[i-1]+f[i-2];
高精板子
点击查看代码
#include <bits/stdc++.h>
using namespace std;
char sum[1200];
int s=0,m=0,n;
int main()
{
cin>>n;
string s1,s2;
int a[1200],b[1200];
int he,i;
s1="0";
s2="1";
for(m=2;m<n+1;m++)
{
memset(a,0,sizeof a);
memset(b,0,sizeof b);
a[0]=s1.length();
for(i=1;i<=a[0];i++)
{
a[i]=s1[a[0]-i]-'0';
}
b[0]=s2.length();
for(i=1;i<=b[0];i++)
{
b[i]=s2[b[0]-i]-'0';
}
he=(a[0]>b[0]?a[0]:b[0]);
for(i=1;i<=he;i++)
{
a[i]+=b[i];
a[i+1]+=a[i]/10;
a[i]%=10;
}
he++;
while((a[he]==0)&&(he>1))
he--;
for(i=he,s=0;i>=1;i--,s++)
{
sum[s]=a[i]+'0';
}
s1=s2;
s2=sum;
}
cout<<s2<<endl;
return 0;
}
一些神奇的性质
-
平方与前后项
从第二项开始 (右移一位,第一项为1,第二项为2...)
每个偶数项的平方都比前后两项之积多 1
每个奇数项的平方都比前后两项之积少 1
比如说
第二项 1 的平方比它的前一项 1 和它的后一项 2 的积 2 少 1
第三项 2 的平方比它的前一项 1 和它的后一项 3 的积 3 多 1。
(注:奇数项和偶数项是指项数的奇偶) -
与集合子集
// f(n+2)项同时也代表了集合 {1,2,3,.....,n} 中所有不包含相邻正整数的子集个数。
-
奇数项求和
a1+a3+a5+a7+.....+a(2n-1)=a(2n);
-
偶数项求和
a2+a4+a6+a8+.....+a(2n)=a(2n+1)-1;
-
平方求和
1-n项的平方和=a(n)*a(n+1);
-
两倍项关系
a(2n)/a(n)=a(n-1)+n(n+1);
-
其他公式
a(n-1)*a(n+1)-[a(n)]平方=(-1)n次方;
当然不能少了推广
就比如说斐波那契--卢卡斯数列
把f(2)改个数就完了 而且任意几个卢卡斯数列相减就是斐波那契数列了
通项公式及应用
还是用线性递推方程x2=x+1因为其他的看不懂
特征方程传送门
递推数列传送门
类似的,一枚均匀的硬币掷10次,问不连续出现正面的可能情形有多少种?
有待补充