不要被(m2-mn-n2)2=1这个条件迷惑而采用搜索。这题m,n,k的范围不允许用搜索的。找找m,n的规律可以发现,其实m,n都是相邻两项Fibonacci数。而且很容易证明得到当F(n-1),F(n)满足那个式子的时候F(n),F(n+1)也一定满足那个式子。
#include
<
iostream
>
using namespace std;
const int N = 1000 ;
long long Fibonacci[N];
int main()
{
Fibonacci[0] = 1;
Fibonacci[1] = 1;
int i = 1;
while(i<N)
{
i++;
Fibonacci[i] = Fibonacci[i-1] + Fibonacci[i-2];
}
long k;
long long j;
while(cin>>k)
{
i = 2;
while(Fibonacci[i] <= k) i++;
j = Fibonacci[i-1]*Fibonacci[i-1] + Fibonacci[i-2]*Fibonacci[i-2];
cout<<j<<endl;
}
}
using namespace std;
const int N = 1000 ;
long long Fibonacci[N];
int main()
{
Fibonacci[0] = 1;
Fibonacci[1] = 1;
int i = 1;
while(i<N)
{
i++;
Fibonacci[i] = Fibonacci[i-1] + Fibonacci[i-2];
}
long k;
long long j;
while(cin>>k)
{
i = 2;
while(Fibonacci[i] <= k) i++;
j = Fibonacci[i-1]*Fibonacci[i-1] + Fibonacci[i-2]*Fibonacci[i-2];
cout<<j<<endl;
}
}