Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Задача 21. Проверка простого числа
Условие задачи. Дано натуральное число N. Проверить, является ли оно простым. Простым называется натуральное число, имеющее ровно два различных делителя: единицу и самого себя. Следовательно, для проверки натурального числа N на простоту необходимо убедится, что оно больше 1 и делится без остатка только на 1 и самого себя. Можно заметить, что числа, большие, чем N div 2 (где операция a div b – целочисленное деление) делителями числа N быть не могут - это следует из теории чисел. Следовательно, так как любое натуральное число N > 1 однозначно делится на 1 и самого себя, то для утверждения об отсутствии других делителей необходимо убедиться, что оно не делится без остатка на какие-либо другие натуральные числа из диапазона от 2 до N div 2 включительно. При этом достаточно найти в нем хотя бы одно число P такое что N mod P = 0, чтобы утверждать, что число N не является простым, и в этом случае нет необходимости проверять весь диапазон. Для реализации проверки наличия у числа N хотя бы одного делителя из диапазона от 2 до N div 2 включительно воспользуемся алгоритмической конструкцией «цикл с предусловием» и логической переменной divider _ finded (изначально имеющей значение «ложь», обозначенное как False), обеспечивающей завершение цикла по нахождению делителя до исчерпания диапазона и сохранению результата – был ли пройден весь диапазон без нахождения или был найден делитель. Тогда, если считать, что логическая переменная может принимать два значения «Истина» и «Ложь», обозначаемые как True и False (в конкретных языках программирования могут использоваться другие обозначения или в качестве логических могут рассматриваться выражения других типов), можно записать алгоритм следующим образом: Структурированная запись алгоритма 21 1. N = 0 2. divider_finded = False 3. Пока N меньше 1, повторять: Ввести значение переменной N. 4. Если N равно 1, то: 4.1. Вывести сообщение «Введена единица (не простое и не составное число)» Иначе: 4.2. K = N div 2 4.3. P = 2 4.4. Пока P £ K и divider _ finded равно False, повторять: 4.4.1. Если N mod P равно 0, то: 4.4.1.1. divider_finder = True Иначе: 4.4.1.2. P = P + 1 4.5. Если divider_finder равно True, то: 4.5.1. Вывести сообщение «Введенное число не является простым» Иначе: 4.5.1. Вывести сообщение «Введенное число является простым».
Схема алгоритма
Программа на языке Си #include <stdio.h> #include <stdlib.h> /* Программа подготовлена с помощью Dev-C++ 5.11 */ int main(int argc, char *argv[]) { int N, K, P; int divider_finded = 0; /* Целое, равное 0 -- "ложь" */ while(N < 1){ printf("Введите натуральное число N: "); scanf("%d", &N); } if(N == 1) { printf("Введена единица (не простое"); printf(" и не составное число)\n"); } else { K = N / 2; P = 2; while(P<=K &&!divider_finded) if(N % P == 0) divider_finded = -128; /* Все, что не равно 0 -- "истина" */ else P++; if(divider_finded) /* Аналогично if(divider_finded!= 0) */ printf("Число не является простым"); else printf("Число является простым"); } system("pause"); return 0; } Программа на языке Паскаль Program Pr_21; Var K, N, P: integer; divider_finded: boolean; begin N:=0; divider_finded:=false; while N<1 do begin writeln(' Введите натуральное число N: '); readln(N); end; if N=1 then begin writeln(' Введена единица (не простое ', ' и не составное число)'); end else begin K:=N div 2; P:=2; while (P<=K) and not divider_finded do if N mod P = 0 then divider_finded:= true else P:=P+1; if divider_finded then { Аналогично if divider_finded = true } writeln(' Число не является простым ') else writeln(' Число является простым '); end; end. Программа на языке Фортран Program Pr_21 Implicit none integer K, N/0/, P logical divider_finded divider_finded=.false. do while (N<1) print *, ' Введите натуральное число N: ' read *, N enddo if (N==1) then print *,' Введена единица (не простое ', & ' и не составное число)' else K = N/2 P = 2 do while (P<=K.and..not.divider_finded) if (mod(N,P) == 0) then divider_finded=.true. else P = P+1 endif enddo if (divider_finded) then { Аналогично if (divider_finded ==.true.) } print *,' Число не является простым ' else print *,' Число является простым ' endif endif end Программа на языке Python N = 0 divider_finded = False while N < 1: print("Введите натуральное число N: ") N=int(input()) if N == 1: print("Введена единица ") print("(не простое и не составное число)") else: K = N // 2 P = 2 while P <= K and not divider_finded: if N % P == 0: divider_finded = True else: P = P + 1 if divider_finded: print("Введенное число не является простым") else: print("Введенное число является простым") Программа в системе Матлаб N=0; divider_finded=false; while N<1 N=input('Введите натуральное число N'); end if N == 1
disp('Введена единица ') disp('(не простое и не составное число)') else K=N/2; P=2; while P<=K && ~ divider_finded if rem(N,P)==0 divider_finded=true; else P=P+1; end end if divider_finded disp('Число не является простым') else disp('Число является простым') end end
|
||||||
Последнее изменение этой страницы: 2021-04-12; просмотров: 115; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.189.193.172 (0.014 с.) |