题目描述
给定 a0,a1a0,a1,以及 an=p×an−1+q×an−2an=p×an−1+q×an−2 中的 p,qp,q。
这里 n≥2n≥2。
求第 kk 个数 akak 对 1000010000 的模。
输入格式
输入包括 55 个整数:a0、a1、p、q、ka0、a1、p、q、k。
输出格式
第 kk 个数 akak 对 1000010000 的模。
数据范围
1≤a0,a1,p,q,k≤100001≤a0,a1,p,q,k≤10000
输入样例:
20 1 1 14 5
输出样例:
8359
思路
一开始没想到用数组,只用了a0、a1、p、q这几个数递推,然后发现怎么推都很奇怪,后面发现其实地推问题用数组很好解决。原始代码如下(错误的):
#include <iostream>
using namespace std;
int compute(int a0, int a1, int p, int q) {
a1 = p * a1 + q * a0;
return a1;
}
int main()
{
int a0, a1, p, q, k;
cin >> a0 >> a1 >> p >> q >> k;
for (int i = 0;i < k-1;i++) {
a1=compute(a0, a1, p, q);
a0 = a1;
}
cout << a1 % 10000 << endl;
return 0;
}
后来用了数组的代码如下:
#include <iostream>
using namespace std;
int main()
{
int p, q, k,a[10000];
cin >> a[0] >> a[1]>> p >> q >> k;
for (int i = 2;i<=k;i++) {
a[i] = p * a[i - 1] + q * a[i - 2];
}
cout << a[k] % 10000 << endl;
return 0;
}