至尊问题「建议收藏」

称号:已知m、n为整数,且满足下列两个条件:① m、n∈1,2,…,K,(1≤K≤10^9)② (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、n为整数,且满足下列两个条件:
① m、n∈1,2,…,K,(1≤K≤10^9)

② (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的值。

例子输入

1995

例子输出

3524578

题目字数不多。可是条件2看起来貌似有点复杂。但实际上。它也是个突破口;

由条件2:(n^ 2-mn-m^2)^2=1

故而:      (m^2 + mn- n^2)^2=1

继续化简:m^2+mn-n^2=(m+n)^2-mn-2n^2 

                                                =(m+n)^2-(m+n)n-n^2
即:          (n^2-mn-m^2)^2=[(m+n)^2-(m+n)n-n^2]^2

我们观察上述最后的等式,我们能够发现

n->m+n (第一个平方)

m->n,n->m+n(中间的因式)

m->n(第二个平方)

这时我们发现这是我们熟悉的斐波那契数列。这样。这一题的突破口非常明显了,m、n都是在K(包含K)之内的最大的两个满足斐波那契数列的数;

另外因为1≤K≤10^9可能m、n数字较大,即会发生数字超限,用两个数组进行平方运算以及相加运算。

#include <iostream>using namespace std;void Add(int *arrm, int *arrn, int len)  //大整数相加{    int *arr = new int[len + 1];    for(int i = 0; i < len + 1; i++)        arr[i] = 0;    for(int i = 0; i < len; i++)    {        arr[i] += arrm[i] + arrn[i];        if(arr[i] >= 10)  //进位        {            arr[i + 1] += arr[i] / 10;            arr[i] %= 10;        }    }    int index = len;    while(!arr[index])    {        index--;    }    for(int i = index; i >= 0; i--)        cout << arr[i];    cout << endl;}void Mul(int *arr, int *arr1, int len1)  //大整数相乘{    for(int i = 0; i < len1; i++)    {        for(int j = 0; j < len1; j++)        {            arr[i + j] += arr1[i] * arr1[j];            if(arr[i + j] >= 10)  //进位            {                arr[i + j + 1] += arr[i + j] / 10;                arr[i + j] %= 10;            }        }    }}void BigData(int m, int n){    int num1 = m;    int num2 = n;    int *arr1 = new int[10];    int *arr2 = new int[10];    int len1 = 0, len2 = 0;    while(num1)  //数字数组化    {        arr1[len1++] = num1 % 10;        num1 /= 10;    }    while(num2)    {        arr2[len2++] = num2 % 10;        num2 /= 10;    }    int len;    if(len1 > len2)        len = 2 * len1;    else        len = 2 * len2;    int *arrm = new int[len];    int *arrn = new int[len];    for(int i = 0; i < len; i++)    {        arrm[i] = 0;        arrn[i] = 0;    }    Mul(arrm, arr1, len1);  //大整数相乘    Mul(arrn, arr2, len2);    Add(arrm, arrn, len);  //相加}void Fibo(int K){    if(K < 1)        return;    if(K == 1)    {        cout << 2 << endl;        return;    }    int m = 1, n = 1;    int p = m + n;    while(p <= K)  //寻找满足条件的两个Fibonacci数    {        m = n;        n = p;        p = m + n;    }    if(m < 10000 || n < 10000)        cout << m * m + n * n << endl;    else        BigData(m, n);}int main(){    int K;    cin >> K;    Fibo(K);    return 0;}

至尊问题「建议收藏」

O(∩_∩)O欢迎不吝赐教….

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129191.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OSChina 技术周刊第五期 —— 2014 非常好用的开源 Android 测试工具

    OSChina 技术周刊第五期 —— 2014 非常好用的开源 Android 测试工具

    2021年9月1日
    54
  • 再生龙硬盘对拷使用教程_linux系统怎样备份

    再生龙硬盘对拷使用教程_linux系统怎样备份教程1再生龙备份恢复说明:准备两个u盘,一个做再生龙的启动盘,一个做存储镜像文件的盘1.下载再生龙2.下载工具tuxboot制作u启(1)https://sourceforge.net/projects/tuxboot/files/0.8/Windows/3.制作u盘启动盘(1)Clonezilla镜像:clonezilla-live-2.6.1-25-amd64.zip(2)Clon…

    2025年7月3日
    3
  • oracle查看表字段类型_oracle更改表字段类型

    oracle查看表字段类型_oracle更改表字段类型查看oracle中的表的字段类型的sql:selectCOLUMN_NAME,DATE_TYPE,DATA_LENGTH,DATA_PRECISIONfromall_tab_columns

    2025年9月4日
    6
  • 自己搭建游戏加速器_自己可以搭建加速器吗

    自己搭建游戏加速器_自己可以搭建加速器吗因为自己用nn减速器和朋友联机方舟延迟太高了,联系客服,客服又不懂我的意思(就我b事最多,爱用不用),所以出一个自建游戏加速器的教程。对迷失森林,使命召唤,怪物猎人,方舟,这样的和朋友联机的游戏,效果极佳警告:别用这个施展魔法!否则后果自负!只能用来国内游戏和朋友联机!win7系统懒得折腾就放弃吧,win10系统继续往下看,开发者请忽略这篇文章1买一个自己的服务器首选阿里云,其次腾讯云,因为阿里云宽带大。其他云服务器商没试过,宽带估计不如阿里云和腾讯云。腾讯云和阿里云的宽带都是非常好的。恰

    2025年7月8日
    3
  • java身份证识别_阿里java面试经验

    java身份证识别_阿里java面试经验前几天需要用到阿里的OCR接口,中间有踩坑,现在记录下来,已便使用一.BASE64OCR调用文档中需要传入BASE64,感谢Apache<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</a…

    2022年10月19日
    2
  • xp的终极优化

    xp的终极优化总体设想:让WinXP更苗条、性感、速度更快,使用更便捷。为了达到这个目的,我们主要从四个方面入手:1、减少磁盘空间占用2、终止不常用的系统服务3、安全问题4、另外一些技巧首先问一下,你是不是很想激活XP,不。。。准确的说你是不是想在ms的站上能够升级。如果答案是肯定的话,那我们就先来探讨一下安装的问题,目前流行的V4、V5、V6版本我还是比较推荐的,尤其是V5和V6这两个。安装的过程中有个序

    2022年10月7日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号