天天看點

PTA 求特殊方程的正整數解 (15 分)

本題要求對任意給定的正整數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;
}
           

送出結果:

PTA 求特殊方程的正整數解 (15 分)

 測試結果:

PTA 求特殊方程的正整數解 (15 分)

繼續閱讀