码迷,mamicode.com
首页 > 其他好文 > 详细

Pell佩尔方程 x^2-61*y^2=1

时间:2016-08-22 13:53:35      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:

有一个特殊的佩尔方程:x^2-61*y^2=1

下面我将编程求解它的最小解

如果直接枚举x和y的话,大约需要10秒

代码:

#include<iostream>
using namespace std;

int main()
{
	long long x = 2, y = 0, flag = 3;		//flag=x*x-61*y*y-1
	while (flag)
	{
		if (flag > 0)
		{
			flag -= 61 * (2 * y + 1);
			y++;
		}
		else
		{
			flag += 2 * x + 1;
			x++;
		}
	}
	cout << x << "  " << y << "  " << x*x;
	system("pause>nul");
	return 0;
}

如果先数学求解的话,自然会快一些。

首先,x必定是奇数,y必定是偶数

设x=s*2+1,y=t*2

那么s(s+1)=61t*2

分解:有2种情况

第一种,s=61*a^2,s+1=b^2,那么b^2-61*a^2=1,与x,y是最小解矛盾。

第二种,s=a^2,s+1=61*b^2,那么a^2-61*b^2=-1,化成这种佩尔方程了。

如果这个方程有解的话,原方程也有解,而且这个方程的解比原方程的解小得多。

2个方程是几乎差不多的,代码只需要略略改改就可以了。

代码:

#include<iostream>
using namespace std;

int main()
{
	long long x = 2, y = 0, flag = 5;
	while (flag)
	{
		if (flag > 0)
		{
			flag -= 61 * (2 * y + 1);
			y++;
		}
		else
		{
			flag += 2 * x + 1;
			x++;
		}
	}
	cout << x*x * 2 + 1;
	system("pause>nul");
	return 0;
}

这个不需要1秒就可以算完。


最后,附上PDF的截图

技术分享

Pell佩尔方程 x^2-61*y^2=1

标签:

原文地址:http://blog.csdn.net/nameofcsdn/article/details/52275760

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!