兔子繁殖(也就是斐波那契数列啦)
下面这个应该可以计算到100多吧,没仔细算过
主要是利用的 矩阵快速幂 的方法#include#include 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< >n; mp(n); return 0;}
快速幂的话,时间复杂度应该回小很多,如果拿来做openjudge之类的,只要不是太高精度,应该没问题