Усовершенствуйте приведённую выше программу с учётом этих соображений. В программе проверяется, является ли заданное натуральное число простым: последовательно перебираются его возможные делители от 2 до . Учтите, что если , то хотя бы одно из чисел , не больше .
Если составное число
var
n, i: longint;
flag: boolean;
begin
write('Введите n (n >= ): ');
read(n);
i := ;
flag := true;
while (i <= n div i) and flag do
begin
if n mod i = then
flag := false
else
i := i +
end;
if flag then writeln('Да')
else writeln('Нет')
end.
Переменная flag сначала имеет значение true: делитель ещё не обнаружен. Переменная i получает значение i проверка i <= n div i равносильна проверке longint. Так перебираются только делители не больше n mod i даёт остаток: если он равен нулю, число делится на i, поэтому flag становится false; иначе переходим к следующему кандидату.
Например, для
Программа перебирает делители только при i <= n div i и выводит «Да» для простого числа, «Нет» для составного.
