一、背景介绍
佩尔方程,是一种不定二次方程。Pell方程,古希腊和印度的数学家对此类方程的研究做了最早的贡献,由费马首先进行了深入研究,拉格朗日给出了解决方案,但后此类方程来却被欧拉误记为佩尔提出,并写入他的著作中。后人多称佩尔方程。
二、方程求解
设d为正整数,佩尔方程形式为:
x
2
−
d
y
2
=
1
x^2 - dy^2 = 1
x2−dy2=1
- 1)如果d为平方数,则方程变为了(x-√dy)(x+√dy) = 1,此时只有x = 1或-1,y=0,这两组特定解。
- 2)当d不为平方数时,方程有无穷多组整数解。
所以得到解的递推式:
x
n
=
x
n
−
1
x
1
+
d
y
1
y
n
−
1
x_n = x_n-_1x_1 + dy_1y_n-_1
xn=xn−1x1+dy1yn−1
y n = x 1 y n − 1 + x n − 1 y 1 y_n = x_1y_n-_1 + x_n-_1y_1 yn=x1yn−1+xn−1y1
可以用矩阵快速幂求解:
暴力求解代码:
void search(int d,int &x,int &y) //x^2 - d*(y^2) = 1
{
y=1;
while(1)
{
x=(long long )sqrt(d*y*y+1);
if(x*x-d*y*y==1)
break;
y++;
}
}