zoukankan      html  css  js  c++  java
  • luogu1775 古代人的难题 打表找规律

    题目大意:给出一正整数k,求满足(x^2-x*y-y^2)^2=1且x,y∈[1,k]且x^2+y^2最大的正整数x,y。

    既然x,y的范围给出来了,我们便有了暴力解法。因此,本题最适合打表找规律了!

    打表代码:

    #include <cstdio>
    using namespace std;
    
    int main()
    {
    	printf("k	x	y
    ");
    	for (long long k = 1; k <= 100; k++)
    	{
    		long long ansX = 0, ansY = 0;
    		for (long long x = k; x >= 1; x--)
    		{
    			for (long long y = k; y >= 1; y--)
    			{
    				long long t = x * x - x * y - y * y;
    				if ((t == 1 || t == -1) && x*x + y*y > ansX*ansY)
    				{
    					ansX = x;
    					ansY = y;
    				}
    			}
    		}
    		printf("%lld	%lld	%lld
    ", k, ansX, ansY);
    	}
    	return 0;
    }
    

      一运行,发现x就是小于等于k的最大斐波那契数,y就是小于等于k的第二大斐波那契数。于是求即可。

    AC代码:

    #include <cstdio>
    using namespace std;
    
    #define ll long long
    
    int main()
    {
    	ll k;
    	scanf("%lld", &k);
    	ll f[3];
    	f[0] = f[1] = 1;
    	ll i = 1;
    	while (f[i % 3] < k)
    	{
    		i++;
    		f[i % 3] = f[(i - 1) % 3] + f[(i - 2) % 3];
    	}
    	printf("%lld %lld
    ", f[(i - 1) % 3], f[(i - 2) % 3]);
    	return 0;
    }
    

      正确解释:(x^2 - xy - y^2)^2 = (y^2+ xy - x^2)^2 =[(x+y)^2-xy-2*x^2]^2 =[(x+y)^2-(x+y)*x-x^2]^2。把x换成x+y,y换成x就知道这是个斐波那契数了。

  • 相关阅读:
    python 三方面库整理
    windows MYSQL 安装及修改root密码
    TCP 套叠字
    自动化谷歌浏览驱动
    python os
    python 协程
    python GIL :全局解释器
    python 多进程
    python 多线程
    python 3 往Excel 中的写入内容但不覆盖原内容
  • 原文地址:https://www.cnblogs.com/headboy2002/p/8859096.html
Copyright © 2011-2022 走看看