背景
小铭的数学之旅2。
描述
已知m、n为整数,且满足下列两个条件:
① m, n∈{1, 2, ..., K}
② (n^2-mn-m^2)^2=1
编一程序,对给定K,求一组满足上述两个条件的m、n,并且使m^2+n^2的值最大。例如,若K=1995,则m=987,n=1597,则m、n满足条件,且可使m^2+n^2的值最大。
格式
输入格式
输入仅一行,K的值。
输出格式
输出仅一行,m^2+n^2的值。
思路
这个是vijos的题面,洛谷的太鬼畜了,vijos是要求$m^2+n^2$,洛谷是要求$n$和$m$
$Fibonacci$相邻两项即可满足条件,证明如下:
$n^2-nm-m^2=n^2-m(n+m)=(f_{n})^2 - f_{n-1}f_{n+1}= \pm 1$
所以我们只要证明$(f_{n})^2 - f_{n-1}f_{n+1}= \pm 1$即可
首先$(f_{2})^2 - f_{1}f_{3}=1-2=-1 \ , \ (f_{3})^2 - f_{2}f_{4}=9-10=-1$
我们使用数学归纳法,假设结论对$n(n\geq 2)$时,$2n$和$2n+1$均成立
则$(f_{2n})^2=(f_{2n-1}+f_{2n-2})^2=(f_{2n-1})^2+2f_{2n-1}f_{2n-2}+(f_{2n-2})^2$
$=f_{2n-1}(f_{2n-1}+f_{2n-2})+f_{2n-1}f_{2n-2}+f_{2n-3}f_{2n-1}-1$
$=f_{2n-1}f_{2n}+f_{2n-1}(f_{2n-2}+f_{2n-3})-1$
$=f_{2n-1}f_{2n}+(f_{2n-1})^2-1$
$=f_{2n-1}(f_{2n}+f_{2n-1})-1$
$=f_{2n-1}f_{2n+1}-1$
所以$f_{2n}$成立,此时又可得
$(f_{2n+1})^2=(f_{2n}+f_{2n-1})^2=(f_{2n})^2+2f_{2n}f_{2n-1}+(f_{2n-1})^2$
$=f_{2n}(f_{2n+1}+f_{2n-1})+f_{2n}f_{2n-1}+f_{2n-2}f_{2n}+1$
$=f_{2n}f_{2n+1}+f_{2n}(f_{2n-1}+f_{2n-2})+1$
$=f_{2n}f_{2n+1}+(f_{2n})^2+1$
$=f_{2n}(f_{2n+1}+f_{2n})+1$
$=f_{2n}f_{2n+2}+1$
所以对一切$n$,结论均成立
#include <cstdio> int main() { int k,m = 1,n = 1; scanf("%d",&k); while (n+m <= k) { n += m; m = n-m; } printf("%I64d",(long long)m*(long long)m+(long long)n*(long long)n); return 0; }