• POJ1320 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

  • 相关阅读:
    转--Android中自定义字体的实现方法
    android中Intent传值与Bundle传值的区别详解
    通过Application传递数据代码
    LayoutInflater的使用
    转--Android资源总结(环境搭建/ 反编译工具)
    转--android Toast大全(五种情形)建立属于你自己的Toast
    转--9中对话框
    转--全局异常处理
    安卓记住密码
    转--Android学习笔记-实用代码合集
  • 原文地址:https://www.cnblogs.com/zhsl/p/2934486.html
Copyright © 2020-2023  润新知