C 言語で完全数かどうかを判定する方法

CBeginner
オンラインで実践に進む

はじめに

この実験では、与えられた数が完全数かどうかを調べる C プログラムの書き方を学びます。プログラムはユーザーから整数を入力を受け取り、その真の約数の合計を計算し、その数が完全数かどうかを判断します。この実験は、数論と離散数学の基本的な概念をカバーし、これらの原理を C プログラミングで実践的に適用する方法を示します。

プログラムはまず、ユーザーに正の整数を入力するように促します。次に、その数の真の約数(つまり、その数より小さく、その数を割り切ることができるすべての正の整数)の合計を計算します。最後に、プログラムは真の約数の合計を元の数と比較し、その数が完全数であるかどうかを示す結果を出力します。

整数の入力

このステップでは、完全数をチェックするための C での整数の入力方法を学びます。ユーザーが分析対象の数を指定できる C プログラムを作成します。

まず、プロジェクトディレクトリに新しい C ファイルを作成します。

cd ~/project
nano perfect_number.c

次に、ファイルに以下のコードを追加します。

#include <stdio.h>

int main() {
    int number;

    // ユーザーに入力を促す
    printf("完全数かどうかをチェックする正の整数を入力してください:");
    scanf("%d", &number);

    // 入力された数を表示して確認する
    printf("入力された値:%d\n", number);

    return 0;
}

出力例:

完全数かどうかをチェックする正の整数を入力してください: 28
入力された値: 28

コードを詳しく見てみましょう。

  • #include <stdio.h> は標準入出力ライブラリを含みます。
  • scanf("%d", &number) はユーザーから整数を入力します。
  • printf() は入力を促し、入力された数値を表示するために使用されます。

プログラムをコンパイルして実行します。

gcc perfect_number.c -o perfect_number
./perfect_number

真の約数の合計と数の比較

このステップでは、以前の C プログラムを修正して、真の約数の合計を計算し、その数が完全数かどうかを判断します。

既存のファイルを開き、コードを更新します。

nano ~/project/perfect_number.c

以前のコードを以下のコードに置き換えます。

#include <stdio.h>

int main() {
    int number, sum = 0;

    // ユーザーに入力を促す
    printf("完全数かどうかをチェックする正の整数を入力してください:");
    scanf("%d", &number);

    // 真の約数の合計を計算する
    for (int i = 1; i < number; i++) {
        if (number % i == 0) {
            sum += i;
        }
    }

    // 数が完全数かどうかをチェックする
    if (sum == number) {
        printf("%d は完全数です!\n", number);
    } else {
        printf("%d は完全数ではありません。\n", number);
    }

    return 0;
}

プログラムをコンパイルして実行します。

gcc perfect_number.c -o perfect_number
./perfect_number

完全数の出力例:

完全数かどうかをチェックする正の整数を入力してください: 28
28 は完全数です!

非完全数の出力例:

完全数かどうかをチェックする正の整数を入力してください: 12
12 は完全数ではありません。

解説:

  • for ループは 1 から number - 1 までの数を繰り返します。
  • number % i == 0i が数の約数であるかどうかをチェックします。
  • sum += i はすべての真の約数を合計します。
  • 完全数は、その真の約数の合計に等しい正の整数です。

結果の出力

この最終ステップでは、完全数の詳細な出力を提供するようにプログラムを拡張します。これには、約数と合計が含まれます。

ファイルを開き、コードを更新します。

nano ~/project/perfect_number.c

以前のコードを以下のコードに置き換えます。

#include <stdio.h>

int main() {
    int number, sum = 0;

    // ユーザーに入力を促す
    printf("完全数かどうかをチェックする正の整数を入力してください:");
    scanf("%d", &number);

    // 約数のヘッダーを出力する
    printf("%d の真の約数:", number);

    // 真の約数の合計を計算し、出力する
    for (int i = 1; i < number; i++) {
        if (number % i == 0) {
            printf("%d ", i);
            sum += i;
        }
    }

    // 詳細な結果を出力する
    printf("\n\n真の約数の合計:%d", sum);

    // 完全数かどうかをチェックし、出力する
    if (sum == number) {
        printf("\n%d は完全数です!\n", number);
    } else {
        printf("\n%d は完全数ではありません。\n", number);
    }

    return 0;
}

プログラムをコンパイルして実行します。

gcc perfect_number.c -o perfect_number
./perfect_number

完全数 (28) の出力例:

完全数かどうかをチェックする正の整数を入力してください: 28
28 の真の約数: 1 2 4 7 14

真の約数の合計: 28
28 は完全数です!

非完全数 (12) の出力例:

完全数かどうかをチェックする正の整数を入力してください: 12
12 の真の約数: 1 2 3 4 6

真の約数の合計: 16
12 は完全数ではありません。

主な改善点:

  • すべての真の約数を表示するようになりました。
  • 真の約数の合計を表示するようになりました。
  • 明確でフォーマットされた出力を提供するようになりました。
  • 完全数の検出の核心ロジックは維持されています。

まとめ

この実験では、C 言語で整数を入力する方法と、ある数が完全数かどうかを判断する方法を学びます。最初に、ユーザーに正の整数を入力するように促す C プログラムを作成します。次に、その数の真の約数の合計を計算し、元の数と比較して、それが完全数かどうかをチェックします。最後に、結果をコンソールに出力します。

この実験で学ぶ重要な点は、scanf() を使って整数を入力すること、for ループを使って真の約数の合計を計算すること、そしてその合計を元の数と比較して完全数かどうかを判断することです。