POJ 1320 Street Number (佩尔方程)

题意:求两个不等的整数(n,m)使得:

1+2+...+n=(n+1)+...+m

分析:1+2+…+n=n(n+1)/2=(n+1)+…+m=(m-n)*(m+n+1)/2,即:

(2m+1)^2-8n^2=1;

设:x=2m+1,y=n,则:x^2-8y^2=1;这是典型的佩尔方程。已知x1=3,y1=1

佩尔方程的迭代公式:x[n]=x[n-1]*x1+d*y[n-1]*y1. y[n]=x[n-1]*y1+y[n-1]*x1

故有:x[n+1]=3x[n]+8y[n] , y[n+1]=x[n]+3y[n]

代码:

#include<cstdio>
using namespace std ;

int main()
{
    int x,y;
    int px=3,py=1;
    for(int i=0;i<10;i++){

        //2m+1)^2-8n^2=1  -> x^2-8y^2=1 (x=2m+1 y=n)
        x=3*px+8*py;
        y=px+3*py;
        printf("%10d%10d\n",y,(x-1)/2);
        px=x;
        py=y;
    }
    return 0 ;
}

猜你喜欢

转载自blog.csdn.net/qq_37960603/article/details/81503024