本题要求对任意给定的正整数N,求方程X2+Y2=N的全部正整数解。
输入格式:
输入在一行中给出正整数N(≤10000)。
输出格式:
输出方程X2+Y2=N的全部正整数解,其中X≤Y。每组解占1行,两数字间以1空格分隔,按X的递增顺序输出。如果没有解,则输出No Solution
。
输入样例1:
884
输出样例1:
10 28
20 22
输入样例2:
11
输出样例2:
No Solution
问题分析
定义一个flag作为有无答案的标识量,为0表示无答案,为1表示有答案。该方程为圆的方程可知x与y最大不超过n的平方根,定义循环开始查找,直到x与y满足方程且x<j;满足的值直接输出,同时使flag=1表示找到了至少一组答案。在判断所有的可能的答案后判断flag的值,根据flag的值判是否有答案
代码实现
#include<stdio.h>
#include<math.h>
int main(){
int n,flag=0;
scanf("%d",&n);
for(int i=1;i<=sqrt(n);i++){
for(int j=0;j<=sqrt(n);j++){
if(i*i+j*j==n&&i<j){
printf("%d %d\n",i,j);
flag=1;
}
}
}
if(flag==0){
printf("No Solution");
}
return 0;
}