谁能写一个程序,能这些数都找出来吗?
/*
分析:
x+y=z
z*z=10000x+y
去掉参数z得 (x+y)^2=10000x+y
二元二次不定方程,其中1000<=x<10000,0<=y<10000,x,y属于Z
其解即是要求的
做如下变形
z=x+y
z^2=z+9999x
z^2-z=9999x
所以,有必要条件(z^2-z)(mod 9999)=0
即(z(z-1))(mod 9999)=0
算法设计,不妨枚举9999的倍数,再测试z(z-1)=x*9999是否有解,最后核查x,y的合法范围。
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
int x,y,z;
for(x=1000;x<10000;x++){
z=(int)ceil(sqrt(9999.0*x));
if(z*(z-1)!=9999*x)continue;
y=z-x;
if(y>=10000 || y<0)continue;
printf("%.4d%.4d\n",x,y);
}
//system("pause");
}