1543.极值问题

来源:互联网 发布:centos怎么看是否有网 编辑:程序博客网 时间:2024/05/17 01:00

描述

已知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的值

tips:数学题,服
      用到了Fibonacci sequence的一个公式,F(n-1) * F(n+1) - F(n) * F(n) = (-1)^n
       这个式子将F(n+1)换成F(n)+F(n-1), 得到F(n) *F(n-1) +F(n-1) * F(n-1) -F(n) * F(n) = (-1)^n
       再次变形得F(n) * F(n) -F(n-1) * F(n-1) -F(n) *F(n-1) = (-1)^(n-1)
       令m = F(n), n = F(n-1),等式两边取绝对值,即可得到题中所要求的式子

#include <iostream>#include <algorithm>#include <string>using namespace std;int main(){    int K;    scanf("%d",&K);    long long int n = 1,m = 1,tmp;    while (n + m <=K)    {        n += m;        tmp = n;        n = m;        m = tmp;    }    printf("%lld\n",n*n+m*m);    return 0;}



0 0
原创粉丝点击