兔子繁殖(也就是斐波那契数列啦)
下面这个应该可以计算到100多吧,没仔细算过
主要是利用的 矩阵快速幂 的方法
#include<iostream>
#include<cstring>
using namespace std;
struct mat
{
long long a[2][2];
};
mat mm(mat x,mat y)
{
mat r;
memset(r.a,0,sizeof(r.a));
for(int i = 0;i<2;i++)
{
for(int j = 0;j<2;j++)
{
for(int k = 0;k<2;k++)
{
r.a[i][j] += x.a[i][k]*y.a[k][j];
}
}
}
return r;
}
void mp(int n)
{
mat c,r;
memset(r.a,0,sizeof(r.a));
c.a[0][0] = c.a[0][1] = c.a[1][0] = 1;
c.a[1][1] = 0;
r.a[0][0] = r.a[1][1] = 1;
while(n)
{
if(n&1) // => n % 2 == 1
{
r = mm(r,c);
}
c = mm(c,c);
n /= 2; //n<<1
}
cout<<r.a[0][1];
}
int main()
{
int n;
cin>>n;
mp(n);
return 0;
}
快速幂的话,时间复杂度应该回小很多,如果拿来做openjudge之类的,只要不是太高精度,应该没问题