• 【题解】Street Numbers [UVA138]


    【题解】Street Numbers [UVA138]

    传送门:( ext{Street Numbers [UVA138]})

    【题目描述】

    求满足 (n<m)(sum_{i=1}^{n-1}i=sum_{i=n+1}^{m}i) 的正整数对 (n,m) 。从小到大输出前 (10) 组解,要求输出的每个整数都占 (10) 格宽。

    【分析】

    被抄代码+抄题解的xxs们气到了,于是写下这篇题解,顺便简单讲一下佩尔方程(好像在 ( ext{OI}) 里运用不多)

    佩尔方程是一种不定二次方程,且分为两类,该种方程有无穷多个解 【证明】

    【第一类佩尔方程】

    形如 (x^2-Dy^x=1) ((Dinmathbb{N^{*}} ext{且为非平方数}))

    设它的一组最小正整数解为 (left{egin{array}{c}x=x_0\y=y_0end{array} ight.,) 则其第 (n) 个解满足:(x_n+sqrt{D}y_n=(x_0+sqrt{D}y_0)^{n+1})

    (sqrt{D}) 这个东西并不友好,考虑转换成递推式:

    [egin{aligned}x_n+sqrt{D}y_n&=(x_0+sqrt{D}y_0)(x_0+sqrt{D}y_0)^n\ &=(x_0+sqrt{D}y_0)(x_{n-1}+sqrt{D}y_{n-1})\ &=(x_0x_{n-1}+Dy_0y_{n-1})+sqrt{D}(x_0y_{n-1}+y_0x_{n-1})end{aligned}]

    即可得:(left{egin{array}{c}x_n=x_0x_{n-1}+Dy_0y_{n-1}\y_n=x_0y_{n-1}+y_0x_{n-1}end{array} ight.)

    【第二类佩尔方程】

    形如 (x^2-Dy^x=-1) ((Dinmathbb{N^{*}} ext{且为非平方数}))

    设它的一组最小正整数解为 (left{egin{array}{c}x=x_0\y=y_0end{array} ight.,) 则其第 (n) 个解满足:(x_n+sqrt{D}y_n=(x_0+sqrt{D}y_0)^{2n+1})

    求递推式就把右边化成 ((x_0+sqrt{D}y_0)^{2}(x_{n-1}+sqrt{D}y_{n-1})) 再展开,后续推导略。

    【求解方法】

    第一步是求最小正整数解。可以证明当 (D) 较小时 (x_0,y_0) 也较小,所以直接从小到大暴力枚举即可。算出 (x_0,y_0) 后即可递推得到其他解。

    求解佩尔方程通常会以 高精递推/矩阵递推加速 的形式出现(虽然也没多少题)。

    回到这题,先化简柿子:(frac{n(n-1)}{2}=frac{m(m+1)}{2}-frac{n(n+1)}{2}Longrightarrow 2n^2=m^2+m),显然和上面的方程没有丝毫关联,我们给两边同乘 (4) 然后配方:(8n^2=4m^2+4mLongrightarrow (2m+1)^{2}-8n^2=1),忽略 (n<m) 的条件,显然为第一类佩尔方程。

    瞪眼法暴力枚举法可知其最小解为 (left{egin{array}{c}x_0=3\y_0=1end{array} ight.)

    答案为 (left{egin{array}{c}n_i=y_i\m_i=frac{x_i-1}{2}end{array} ight.)

    (输出来后发现除了第 (0) 个解以外其他均满足 (n<m)

    【Code】

    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    #define LL long long
    #define Re register int
    using namespace std;
    const int N=103;
    int D,x[N],y[N];
    int main(){
        x[0]=3,y[0]=1,D=8;
        for(Re i=1;i<=10;++i)
            x[i]=x[0]*x[i-1]+D*y[0]*y[i-1],
            y[i]=x[0]*y[i-1]+y[0]*x[i-1];
        for(Re i=1;i<=10;++i)//因为要满足n<m,(x0,y0)被舍去了 
            printf("%10d%10d
    ",y[i],x[i]-1>>1);
    }
    
  • 相关阅读:
    httphelper
    MD5加密
    json操作
    将list转成tree
    GenerateId类:生成唯一id、订单号
    加密、解密(默认密钥向量)
    Hadoop HDFS批量处理
    OceanBase学习总结
    TiDB学习
    开机自启动rc.local文件修改权限
  • 原文地址:https://www.cnblogs.com/Xing-Ling/p/13289077.html
Copyright © 2020-2023  润新知