Проверка простоты числа в C

CBeginner
Практиковаться сейчас

Введение

В этом лабораторном практикуме мы изучим, как проверить, является ли число простым в программировании на языке C. Лабораторная работа состоит из трех этапов: ввод целого числа от пользователя, проверка делимости от 2 до квадратного корня из числа и вывод, является ли число простым или нет. По завершении этого практикума у вас будет работающая программа, которая может определить простоту заданного целого числа.

Лабораторная работа начинается с обучения вводу целого числа от пользователя с помощью функции scanf(). Затем она представляет алгоритм проверки простоты числа, который включает в себя проверку делимости от 2 до квадратного корня из введенного числа. Если делители не найдены, число считается простым. Наконец, программа выводит результат, указывая, является ли число простым или нет.

Чтение целого числа

В этом шаге мы изучим, как читать целое число, введённое пользователем, в программировании на языке C. Это первый шаг в создании программы для проверки простоты чисел.

Сначала создадим новый файл C для нашей программы проверки простоты чисел:

cd ~/project
nano prime_checker.c

Теперь напишем код для чтения целого числа:

#include <stdio.h>

int main() {
    int number;

    printf("Введите положительное целое число для проверки на простоту: ");
    scanf("%d", &number);

    printf("Вы ввели: %d\n", number);

    return 0;
}

Пример вывода:

Введите положительное целое число для проверки на простоту: 17
Вы ввели: 17

Давайте разберём код:

  • #include <stdio.h> подключает стандартную библиотеку ввода/вывода
  • int main() — главная функция, с которой начинается выполнение программы
  • int number; объявляет переменную целого типа для хранения введённого пользователем числа
  • printf() отображает запрос пользователю
  • scanf() считывает целое число, введённое пользователем, и сохраняет его в number
  • printf() подтверждает введённое пользователем число

Компилируем и запускаем программу:

gcc prime_checker.c -o prime_checker
./prime_checker

Проверка делимости от 2 до √n

В этом шаге мы реализуем алгоритм проверки простоты числа, проверяя делимость от 2 до квадратного корня из введённого числа.

Давайте изменим нашу предыдущую программу на C, добавив логику проверки простоты:

nano ~/project/prime_checker.c

Обновите код с тестом на делимость:

#include <stdio.h>
#include <math.h>

int is_prime(int number) {
    // Числа меньше 2 не являются простыми
    if (number < 2) {
        return 0;
    }

    // Проверяем делимость от 2 до квадратного корня из числа
    for (int i = 2; i <= sqrt(number); i++) {
        if (number % i == 0) {
            return 0; // Не простое, если делится
        }
    }

    return 1; // Простое, если делителей не найдено
}

int main() {
    int number;

    printf("Введите положительное целое число для проверки на простоту: ");
    scanf("%d", &number);

    if (is_prime(number)) {
        printf("%d — простое число.\n", number);
    } else {
        printf("%d — не простое число.\n", number);
    }

    return 0;
}

Компилируем программу с библиотекой математических функций:

gcc ~/project/prime_checker.c -o ~/project/prime_checker -lm

Примеры вывода:

Введите положительное целое число для проверки на простоту: 17
17 — простое число.

Введите положительное целое число для проверки на простоту: 20
20 — не простое число.

Ключевые моменты реализации:

  • Функция sqrt() из <math.h> вычисляет квадратный корень
  • Мы проверяем делимость только до √n для оптимизации алгоритма
  • Если делителей не найдено, число является простым
  • Оператор взятия остатка от деления % проверяет делимость
  • Возвращаем 0 для не простых чисел, 1 для простых чисел

Вывод, является ли число простым

В этом заключительном шаге мы улучшим нашу программу проверки простоты чисел, добавив более подробный вывод и возможность проверки нескольких чисел.

Давайте изменим программу, чтобы получить более исчерпывающий вывод:

nano ~/project/prime_checker.c

Обновите код, улучшив интерфейс:

#include <stdio.h>
#include <math.h>

int is_prime(int number) {
    // Числа меньше 2 не являются простыми
    if (number < 2) {
        return 0;
    }

    // Проверяем делимость от 2 до квадратного корня из числа
    for (int i = 2; i <= sqrt(number); i++) {
        if (number % i == 0) {
            return 0; // Не простое, если делится
        }
    }

    return 1; // Простое, если делителей не найдено
}

void print_prime_details(int number) {
    if (is_prime(number)) {
        printf("%d — ПРОСТОЕ число!\n", number);
        printf("Объяснение:\n");
        printf("- Оно делится только на 1 и на себя\n");
        printf("- Других делителей не найдено между 2 и √%d\n", number);
    } else {
        printf("%d — НЕ простое число.\n", number);

        // Находим и выводим наименьший делитель
        for (int i = 2; i <= sqrt(number); i++) {
            if (number % i == 0) {
                printf("Объяснение:\n");
                printf("- Делится на %d\n", i);
                printf("- %d × %d = %d\n", i, number / i, number);
                break;
            }
        }
    }
}

int main() {
    int number, continue_check;

    do {
        printf("Введите положительное целое число для проверки на простоту: ");
        scanf("%d", &number);

        print_prime_details(number);

        printf("\nХотите проверить другое число? (1=Да, 0=Нет): ");
        scanf("%d", &continue_check);
    } while (continue_check == 1);

    printf("Спасибо за использование Проверялки Простых Чисел!\n");

    return 0;
}

Компилируем программу:

gcc ~/project/prime_checker.c -o ~/project/prime_checker -lm

Примеры вывода:

Введите положительное целое число для проверки на простоту: 17
17 — ПРОСТОЕ число!
Объяснение:
- Оно делится только на 1 и на себя
- Других делителей не найдено между 2 и √17

Хотите проверить другое число? (1=Да, 0=Нет): 1

Введите положительное целое число для проверки на простоту: 20
20 — НЕ простое число.
Объяснение:
- Делится на 2
- 2 × 10 = 20

Хотите проверить другое число? (1=Да, 0=Нет): 0
Спасибо за использование Проверялки Простых Чисел!

Основные улучшения:

  • Добавлены подробные объяснения для простых и непростых чисел
  • Реализован цикл для проверки нескольких чисел
  • Предоставлен более образовательный вывод о свойствах чисел

Резюме

В этом лабораторном практикуме мы изучили, как в языке программирования C считывать целое число, введённое пользователем, — это первый шаг в создании программы проверки простоты чисел. Затем мы реализовали алгоритм проверки простоты, проверяя делимость от 2 до квадратного корня из введённого числа. Программа проверяет, является ли данное число простым, перебирая числа от 2 до квадратного корня из этого числа и проверяя, делится ли число на каждое из них без остатка. Если делителей не найдено, число считается простым.