你是说计算两个整数的平方等于所给的数,求这两个整数所有可能值对吧!
x^2 + y^2 = n(n由用户所给定);求 x 和 y。
你的代码没问题,可以求出所有正整数解。由于 j 小于 n 的 开方,j 的值由 0 到 n 的开方,对应 i 的值就会由 n 的开方到 0,就会出现重复解,可以再给 j 增加这么一条限制 j <= i ;
源代码如下:#include<stdio.h>
#include<math.h>
int main(int argc,char** argv){
int n;
scanf("%d", &n);
int i, j, k;
int t = 0;
for (i = 0,j = 1;j < sqrt(n) && j <= i; j++){ //递增j
k=n-j*j; //
i=sqrt(k); //将n-j*j结果求根并且int;
if (i*i==k ){
printf("%d %d\n",j,i);
t=1;
}
}
if (!t){
printf("No Solution");
}
return 0;
}
或者对你的代码最简单的修改是:本题要求对任意给定的正整数N,求方程X 2 +Y 2 =N的全部正整数解。
#include<stdio.h>
#include<math.h>
int main(int argc,char** argv){
int n;
scanf("%d",&n);
int j,k;
int t=0;
for (j=1;j<sqrt(n);j++){ //递增j
k=n-j*j; //
int i=sqrt(k); //将n-j*j结果求根并且int;
if (i*i==k && j <= i ){ // j <= i, 其中 j > 0, i <= 0 就不可能了。
printf("%d %d\n",j,i);
t=1;
}
}
if (!t){
printf("No Solution");
}
return 0;
}
|