На предыдущих уроках вы познакомились с
операторами служащими для организации циклов.
Сегодняшний урок мы посвятим решению задач
связанных с проверкой различных свойств
натуральных чисел. К натуральным относятся целые
положительные числа.
Урок 13
Задача 1. Дано
натуральное число N. Определить, является ли оно
простым, т.е. делится нацело только на 1 и на само
себя. (Мы решали эту задачу в 12 уроке, но я хочу
предложить вам другой алгоритм решения.)
Для решения необходимо проверить, делится ли
исходное число на числа от 2 до N-1. Если число
делится хотя бы на одно из чисел без остатка, то
число N не будет простым. Мы можем уменьшить
интервал проверяемых делителей так, как
наибольший из возможных, это N/2. Введем так же
дополнительную переменную F, она будет принимать
значение 1, если обнаружится хотя бы один из
делителей для исходного числа. Первоначально
присвоим F значение 0, т.е. предположим, что число
простое.
Переменные:
N - исследуемое число;
I - переменная цикла;
F - вспомогательная переменная.
Код программы.
Var I,n,f:word;
Begin
Write('Введите натуральное число');
Readln(n);
F:=0;
For I:=2 to n div 2 do if n mod I=0 then f:=1;
If f=1 then writeln('число',n:6,' не простое')
Else writeln('число',n:6,' простое');
Readln
End.
Количество выполнения циклов можно еще
уменьшить. Ведь на самом деле если число N делится
на какое-то число А без остатка (кроме 1 и самого
себя), то оно имеет и второй делитель В=N/A, т.е. если
число не простое то его всегда можно записать как
N=A*B. При возрастании первого делителя, значение
второго будет уменьшаться. Получается, что
достаточно проверить все числа от 2 до SQRT(n), но так
как результат вычисления корня вещественный, а
параметр цикла должен иметь целое значение,
применим функцию определения целой части числа
TRUNC, и получим:
For I:=2 to trunc(sqrt(n)) do if n
mod I=0 then f:=1;
Задача 2.
Даны натуральные числа M и N. Определить,
являются ли они взаимно простыми. Взаимно
простые числа не имеют общих делителей, кроме 1.
Для решения задачи:
- вводим натуральные числа М и N;
- в цикле от 2 до наименьшего числа порождаем I и
проверяем, является ли оно одновременно
делителем М и N;
- в зависимости от значения F выводим результат.
Var k,m,n,f:word;
Begin
Write('Введите 2 натуральных числа');
Readln(n,m);
F:=0;
if n>m then k:=m else k:=n; {k - наименьшее из 2-х чисел }
for I:=2 to k do if (n mod I=0) and (m mod I = 0) then f:=1;
If f=1 then writeln('числа не взаимно простые')
Else writeln('числа взаимно простые');
Readln
End.
Тренировочные
задания.
1. Дан интервал натуральных чисел от N до М.
Определить все простые числа в этом интервале.
2. Дано натуральное число N. Определить все
простые числа не превосходящие N.
3. Дано натуральное число N. Разложить его на
простые множители.
4. Дано натуральное число N. Определить, является
ли оно совершенным. Совершенное число N равно
сумме всех своих делителей, не превосходящих
само N.
5. Дано натуральное число N. Определить, является
ли оно автоаморфным. Автоаморфное число N равно
последним разрядам квадрата этого числа: 5<->25,
6<->36, 25<->625.
Разбор заданий
урока 13.
3. Распечатать в столбик таблицу умножения на 7.
var i: byte;
begin
for I:=1 to 10 do writeln(7,'*',I,'=',7*i);
readln
end.