#include <stdio.h>

#include<iostream>

#include <algorithm>

using namespace std;

typedef long long ll;

const ll mod = 987654321;


ll A[2][2], B[2][2], T[2][2];


void pow(int n)

{

if (n == 0)

{

for (int i = 0; i<2; i++)

for (int j = 0; j<2; j++)

B[i][j] = (i == j);


return;

}

if (n & 1)

{

pow(n - 1);

for (int i = 0; i<2; i++)

for (int j = 0; j<2; j++)

{

T[i][j] = 0;

for (int k = 0; k<2; k++)

T[i][j] = (T[i][j] + A[i][k] * B[k][j]) % mod;

}

for (int i = 0; i<2; i++)

for (int j = 0; j<2; j++)

{

B[i][j] = T[i][j];

}


}

else

{

pow(n / 2);

for (int i = 0; i<2; i++)

for (int j = 0; j<2; j++)

{

T[i][j] = 0;

for (int k = 0; k<2; k++)

T[i][j] = (T[i][j] + B[i][k] * B[k][j]) % mod;

}

for (int i = 0; i<2; i++)

for (int j = 0; j<2; j++)

{

B[i][j] = T[i][j];

}


}

}


int main()

{

int n,m=0;

ll l[25];

A[0][0] = 1; A[0][1] = 1;

A[1][0] = 1; A[1][1] = 0;

while (cin>>n)

{

if (n == 0)break;

ll ans = 0;

if (n & 1) ans = 0;

else if (n<4) ans = 0;

else

{

pow(n - 4);

ans = B[0][0] - n / 2 + 1;

ans %= mod;

if (ans<0)ans += mod;

}

l[m] = ans;

m++;

}

for (int k = 0; k < m; k++)

cout << l[k] << endl;

return 0;

}


点赞(0)
 

0.0分

6 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论