给定正整数 a(a≥1),新斐波那契数列 fa 按如下方式定义: fa (1)=1; fa(2)=a; fa(n)=fa(n−1)+fa(n−2) (n>2)。 例如,给定 a=4,有 f4(1)=1, f4(2)=4, f4(3)=5, f4(4)=9, f4(5)=14, ... 现在已知新斐波那契数列中的一项 x,但并不知道 n 和 a 的值是多少。请你求出所有可能的 n,a(n≥2) 满足 fa(n)=x。c++代码
时间: 2023-12-24 10:06:11 浏览: 157
以下是 C++ 代码实现:
```
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main()
{
int x;
cin >> x;
vector<pair<int, int>> ans;
for (int n = 2; n <= 30; n++) // 枚举 n
{
for (int a = 1; a <= 30; a++) // 枚举 a
{
double phi = (1 + sqrt(5)) / 2;
double psi = (1 - sqrt(5)) / 2;
int f1 = 1;
int f2 = a;
int fn = round(a * pow(phi, n-2) + (x - a * pow(psi, n-2)) / (phi - psi));
// 计算 fn
if (fn == x)
{
ans.push_back(make_pair(n, a));
}
}
}
for (auto p : ans)
{
cout << p.first << " " << p.second << endl;
}
return 0;
}
```
其中,我们枚举 n 和 a,然后按照上面推导出的公式计算 fa(n),并检查是否等于 x。需要注意的是,由于 phi 和 psi 都是无理数,因此我们需要使用 round 函数将结果四舍五入到最接近的整数。最后将所有符合条件的 (n, a) 对输出即可。
阅读全文