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

来源:互联网 发布:大数据国家工程实验室 编辑:程序博客网 时间:2024/05/16 01:16

有一个特殊的佩尔方程: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-1while (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的截图


1 0
原创粉丝点击