Введение
В этом лабораторном практикуме мы изучим, как проверить, является ли число простым в программировании на языке 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()считывает целое число, введённое пользователем, и сохраняет его вnumberprintf()подтверждает введённое пользователем число
Компилируем и запускаем программу:
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 до квадратного корня из этого числа и проверяя, делится ли число на каждое из них без остатка. Если делителей не найдено, число считается простым.



