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