1. 程式人生 > >poj 1320 Street Numbers (佩爾方程)

poj 1320 Street Numbers (佩爾方程)

題目連結:哆啦A夢傳送門

佩爾方程:參考連結:維基

\large {\color{Red} x^{2}-n*y^{2}=1}

最小解,記作(x1,y1),則所有的解(xi,yi)由以下的遞迴關係式得到:

\displaystyle x_{i+1} = x_1 x_i + n y_1 y_i,

\displaystyle y_{{i+1}}=x_{1}y_{i}+y_{1}x_{i}

題意:求滿足1+2+3+……+(n-1)=(n+1)+(n+2)+……+m的前10項n和m。

我們化簡可得:\large {\color{Red} (2*m+1)^{2}-8n^{2}=1}

那麼就可以得結果了。x1=3,y1=1。

\large {\color{Red} x_{i+1}=3x_{i}+8y_{i}}

\large {\color{Red} y_{i+1}=3y_{i}+x_{i}}

 

程式碼:

///佩爾方程應用

#include<cstdio>
#include<algorithm>
#include<cstring>

using namespace std;
typedef long long LL;

int main()
{
    LL px=3,py=1,x1=3,y1=1,n=8;

    for(int i=1;i<=10;i++)
    {
        LL x=3*px+8*py;
        LL y=3*py+px;
        printf("%10lld%10lld\n",y,(x-1)/2);
        px=x;
        py=y;
    }
    return 0;
}