当前位置: 代码迷 >> 综合 >> POJ 1320 Street Number (佩尔方程)
  详细解决方案

POJ 1320 Street Number (佩尔方程)

热度:61   发布时间:2023-12-01 21:37:28.0

题意:求两个不等的整数(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-8n2=1;

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

佩尔方程的迭代公式:x[n]=x[n-1]x1+dy[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 ;
}
  相关解决方案