前言
本来要讲 B S G S BSGS BSGS的,老师拉题发现题目都和这个鬼东西有关,于是临时决定讲这个鬼东西。
老师:今天晚上我们讲Pell方程的求解
某zz:那不就是一个贼水的不定方程吗?
……(讲完后)
某zz:抱歉我错了……
所以讲了一晚上加一上午,我看我是完全不懂哦~。所以还是来这里重新学吧………………
Pell方程
定义
佩尔方程
简单来说,就是对形如 x 2 − d y 2 = 1 x^2-dy^2=1 x2−dy2=1
的不定方程进行求解,其中 x , y x,y x,y均为正整数。
首先我们知道, d d d一定是一个不为完全平方数的正整数,否则 ( x , y ) (x,y) (x,y)为有限个,反之有无限个(可以证明,在上面的百度百科里有证明)。
求解
暴力求解
首先,我们可以有一种暴力的做法,即:从 1 1 1开始枚举 x x x,那么 x x x变为常数, y y y 满足 y = ( x 2 − 1 ) / d y=\sqrt{(x^2-1)/d} y=(x2−1)/d为正整数,那么 ( x 2 − 1 ) / d (x^2-1)/d (x2−1)/d为完全平方数。而暴力的时间复杂度为 O ( 玄 学 ) O(玄学) O(玄学),俺也不会算,料想是可以算的吧(并不确信)。所以并没有用这种方式做题。给一个代码吧。
while (x ++)
{
if ((x * x - 1) % d)
continue;
LL yf = (x * x - 1) / d;
if (sqrt( yf ) * sqrt( yf ) != yf)
continue;
y = sqrt( yf );
break;
}
连分数求解
暴力求解是不可靠的,所以我们需要使用连分数求解法。
连分数一般形式为 a 1 + 1 a 2 + 1 a 3 + 1 a 4 + . . . a1+\frac{1}{a2+\frac{1}{a3+\frac{1}{a4+...}}} a1+a2+a3+a4+...111<