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