luogu1775 古代人的难题 打表找规律

Posted headboy2002

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\tx\ty\n");
	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\t%lld\t%lld\n", 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\n", 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就知道这是个斐波那契数了。

以上是关于luogu1775 古代人的难题 打表找规律的主要内容,如果未能解决你的问题,请参考以下文章

洛谷—— P1775 古代人的难题_NOI导刊2010提高(02)

NOIP 模拟赛中值滤波 打表找规律

HDU 4203 博弈 打表找规律

“玲珑杯”ACM 热身赛 # 0.5 A -- Alarm 素数打表找规律

HDU 4731 Minimum palindrome 打表找规律

第八届省赛 B:Quadrat (打表找规律)