1

私は教科書の問題に取り組んでおり、ユーザーが入力した正の数の下にあるすべての素数を識別するために、以下のコードを書きました。

#include <stdio.h>

int main(void)
{
    int j, input, notaprime;

    scanf_s("%d", &input);

    printf("List of prime numbers:\n");
    for (; input >= 2; input--)
    {
        notaprime = 0;
        for (j = 2; j < input; j++) //OR (for(j = 2; j*j <= input; j++)
        {
            if ((input % j) == 0)
            {
                notaprime = 1;
                break;
            }
            else
            {
                ;
            }
        }

        if (notaprime)
        {
            ;
        }
        else
        {
            printf("%d\n", input);
        }
    }

    return 0;
}

入力として 30 を入力すると、出力は次のようになります。

30
List of prime numbers:
29
23
19
17
13
11
7
5
3
2
Press any key to continue . . .

ただし、内側の for ループの関係演算子を次のように変更すると、次のようになります。

        for (j = 2; j < input; j++)

に:

        for (j = 2; j <= input; j++) //Changed from less than to less than equals

入力値 30 の出力は次のようになります。

30
List of prime numbers:
Press any key to continue . . .

現在、素数は印刷されていませんが、これがそうである論理的な理由は考えられません。なぜこれが有効なのか、考えられる理由を考えて、今、私の頭が痛いです。助けてください。ありがとう!

コードブロック 16.01 と Visual Studio Community 2015 でこれを試しました。出力は同じです。

4

1 に答える 1