本題要求對任意給定的正整數N,求方程X2+Y2=N的全部正整數解。
輸入格式:
輸入在一行中給出正整數N(≤10000)。
輸出格式:
輸出方程X2+Y2=N的全部正整數解,其中X≤Y。每組解占1行,兩數字間以1空格分隔,按X的遞增順序輸出。如果沒有解,則輸出
No Solution
。
輸入樣例1:
884
結尾無空行
輸出樣例1:
10 28
20 22
這道題求滿足方程x^2+y^2=N的所有正整數解,因為是正整數解,假設我們先把0給算進去,那麼x或者y的最大值為根号n,當然這是存在解的情況,最常用的就是列舉法,先讓1和到1 根号n之間的數依次平方相加,再從2到根号n之間的數相加,知道根号n。
代碼如下:
#include<stdio.h>
#include<math.h>
void f(int N)//定義函數,找出所有滿足條件的數
{
int m = (int)sqrt(N);
int flag = 0;
for (register int i = 1; i <= m; i++)
{
for (register int j = i + 1; j <= m; j++)
{
if (pow(i, 2) + pow(j, 2) == N)
{
printf("%d %d\n", i, j);
flag = 1;
}
}
}
if (flag == 0)
{
printf("No Solution\n");
}
}
int main()
{
int N = 0;
scanf("%d", &N);
f(N);
return 0;
}
送出結果:
測試結果: