【pell方程学习】

转自该博客

POJ-1320 Street Numbers pell方程

  题目链接:http://poj.org/problem?id=1320

  此题可以打表水过,但这里涉及的一个知识点,那就是pell方程,形如 ax^2-by^2=1(a,b为非完全平方数)。

  本题最后化简得公式:x^2-8y^2=1

  pell方程的迭代解为:

    Xn = Xn-1 * X1 + d * Yn-1 * Y1
    Yn = Xn-1 * Y1 + Yn-1 * X1

//--------------------------------------------------------------------------------------------------------------------//

  关于pell方程的详细介绍(摘自:http://hi.baidu.com/aekdycoin/item/a45f7c37850e5b9db80c03d1

以下涉及到定理的证明的部分全部略过.



开题自然少不了介绍,以上的公式就是Pell方程的一般形态.

显然如果告诉你a,b,c,一开始想到的只可能是暴力,可是接下来介绍的纯数学的方法可以很快速的求解几乎大部分解.

1.首先构造一个系数矩阵,显然为了构造这个矩阵,我们需要先得到
下面方程的一个最小特解(x,y>0)


至于如何得到,可以使用暴力(当某些情况下暴力几乎求不到最小解)
或我推荐的就是使用连分数的方法来求,至于这个就留到最后来介绍.


假设我们得到了以上方程的特解: x0 y0 (x0,y0>0,并是最小的满足条件的解)

2.继续求

的一个最小特解.

假设是x1,y1(x1,y1>0)

3.
假设你要求第k个解,那么有



证明在这里将被暂时忽略.

例子:
1.求 x^2 - 3y^2 = 1的解

由于这里a=1,b=3,而c=1,所以我们可以知道x0=x1,y0=y1;
不难解得一个最小特解(2,1)
于是有


假设现在要知道第2个解
那么套用上面的公式得到
x2=7
y2=4


49-48=1
其他解类似.

2.求 x^2 - 3y^2 = 13的解
显然x^2 - 3y^2 =1的最小特解在上面已经求出来了

x0=2;
y0=1;
现在我们需要知道的是x^2 - 3y^2 = 13的最小特解,显然应该是
(4,1)
于是如果继续套用上面的解,可以得到:



那么得到
(x1,y1) = (4,1)
(x2,y2) = (11,6)
......

    现在问题来了,现在求出来的是否就是顺序解?(即按x从小到大排)
显然不是.注意(5,2)依然是这组方程的解.并且由(5,2)作为参考依然可以得到许多满足条件的解,所以这种情况下不能绝对的判断由最小特解扩展到的解都是已经按照顺序得到的。


因为我确实理解不了教材中的所谓的"x^2 - 3*y^2 = 13"的前3个解居然没有(4,1).希望哪位大牛能解释一下我的疑惑!

如何用连分数来求一个最小特解?

什么是连分数?
昔日看到书上介绍"连分数的混乱世界",感觉连分数确实是一个相当美妙的东西!为啥?见下图- -~



下面如何用连分数求Pell方程最小解?好象扯不上什么关系?
把上面的连分数写成 p/q=[a0 a1 a2 a3 a4 a5];
对于某数,显然得到的连分数会出现循环的情况,如


可以写成[1,2,2,2....],即从2开始就出现了循环,下面介绍的公式就是通过循环来求解


假设对于Pell方程x^2 - D*y^2 = 1
sqrt(D)=[a0,a1,...an,b1,b2...b(m-1),bm,b1,b2,...]
即以[b1,b2...bm]为循环节出现
p/q=[a0,a1,...an,b1,b2,....b(m-1)]

就是最小的解,然后套用上面的就OK

好了就写这么多了,很多定义,证明无法在这里给出了~
同时由于PELL方程平常见的好象不大多,下面给出2个题目:

http://acm.pku.edu.cn/JudgeOnline/problem?id=1320

http://acm.hdu.edu.cn/showproblem.php?pid=3005

 

在这个博客里给出了暴力求pell方程初始解的算法:博客

 

 

https://blog.csdn.net/luyuncheng/article/details/8033121

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pell 方程是形如 $x^2-dy^2=1$ 的二元二次方程,其中 $d$ 是正整数,$x$ 和 $y$ 是正整数。求解 Pell 方程的一种经典方法是使用连分数。下面是求解 Pell 方程的步骤: 1. 首先,我们找到 Pell 方程的一个基本解 $(x_0,y_0)$,可以通过暴力枚举或使用其他方法来找到基本解。 2. 我们使用基本解 $(x_0,y_0)$ 来构造一个无限循环小数: $$\sqrt{d}=[a_0;\overline{a_1,a_2,\ldots,a_r,2a_0,\overline{a_1,a_2,\ldots,a_r,2a_0,\ldots}}]$$ 其中,$a_0=\lfloor\sqrt{d}\rfloor$,$a_i$ 是循环节中的数字。 3. 我们将这个无限循环小数表示为一个连分数: $$\sqrt{d}=a_0+\frac{1}{a_1+\frac{1}{a_2+\frac{1}{\ldots+\frac{1}{2a_0+\frac{1}{a_1+\frac{1}{a_2+\ldots}}}}}}$$ 4. 我们使用连分数的递归公式,计算出前 $n$ 个连分数的值: $$\begin{aligned}&h_0=a_0, &k_0=1 \\ &h_1=a_0a_1+1, &k_1=a_1 \\ &h_i=a_ih_{i-1}+h_{i-2}, &k_i=a_ik_{i-1}+k_{i-2}\end{aligned}$$ 其中,$h_i$ 和 $k_i$ 分别表示连分数的第 $i$ 个逼近分数的分子和分母。 5. 我们可以证明,对于任意 $n$,$(h_n,k_n)$ 都是 Pell 方程的解。这是由连分数的性质所决定的。 6. 最终,我们可以得到 Pell 方程的所有正整数解 $(x,y)$,它们可以通过 $(x,y)=(x_0h_n+dy_0k_n,x_0k_n+y_0h_n)$ 来计算。 需要注意的是,如果循环节长度为奇数,则最后一个连分数的分母应该是 $2a_0$,否则应该是 $1$。此外,如果循环节长度为 $0$,则 $a_1$ 应该等于 $2a_0$。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值