至尊问题「建议收藏」

称号:已知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欢迎不吝赐教….

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Jmeter性能测试(一)性能测试关键指标解析

    Jmeter性能测试(一)性能测试关键指标解析一、性能测试关键指标解析1、响应时间多–并发量快–延时、响应时间好–稳定性(长时间运行)省–资源利用率响应时间:对请求作出响应所需要的的时间,是用户感知软件性能的主要指标。响应时间包括:1.用户客户端呈现时间2.请求/响应数据网络传输时间3.应用服务器处理时间4.数据库系统处理时间响应时间多少合理?对于一个Web系统,普遍接受的响应时间标准为2/5/8秒(2秒–非常好;5秒–可接受;8秒是上限)2、并发用户数用户…

  • 数据结构与算法(2)

    数据结构与算法(2)

    2021年11月12日
  • Merkle Tree 概念

    Merkle Tree 概念

  • eplan win10 能用激活码激活码_通用破解码

    eplan win10 能用激活码激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • rstrip python_Python strip()、split()和rstrip()方法

    rstrip python_Python strip()、split()和rstrip()方法1.Pythonstrip()语法描述:Pythonstrip()方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。返回值:返回值是返回移除字符串头尾指定的字符生成的新字符串示例:a1=”00000123hello_world12300000000″printa1.strip(“0”)#去除首尾字符0a2…

    2022年10月31日
  • Mount NTFS Partitions

    Mount NTFS PartitionsMountNTFSPartitions18January2007Windowsusesadifferentfilesystem(NTFS)tostorefiles.InorderforFedoratoreadthatfilesystem,yourequireNTFSsupportinyourkernel.Youcaneither

发表回复

您的电子邮箱地址不会被公开。

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