#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分
6 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复