|
发表于 2019-8-7 20:41:31
|
显示全部楼层
你是说计算两个整数的平方等于所给的数,求这两个整数所有可能值对吧!
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;
- }
复制代码 |
|