题意:求两个不等的整数(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]=y[n-1]*y1+yn-1]*x1
故有:x[n+1]=3x[n]+8y[n];
y[n+1]=x[n]+3y[n];
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std ;
int main()
{
int x,y;
int px=3,py=1;
for(int i=0;i<10;i++){
x=3*px+8*py;
y=px+3*py;
printf("%10d%10d\n",y,(x-1)/2);
px=x;
py=y;
}
return 0 ;
}