Проверка числа на совершенность в 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 == 0 проверяет, является ли i делителем числа
  • 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 и сравнение суммы с исходным числом для определения того, является ли оно совершенным числом.