Плиииииз.....паскаль Дано натуральное число n. Выяснить, имеются ли среди чисел n, n+1,...

0 голосов

Плиииииз.....паскаль Дано натуральное число n. Выяснить, имеются ли среди чисел n, n+1, ..., 2n близнецы, т.е. простые числа, разность между которыми равна. Определить процедуру, позволяющую распознать простые числа.
написал программу, но она не выполняется, помогите исправить ошибку
program ex2;
var n:integer;
function P(n:integer):boolean;
var count, k :integer;
begin
count:=0;
k:=2;
while (k*k<=n) and (count=0) do<br> begin
if n mod k=0 then
count:=count+1;
k:=k+1
end;
P:=(count=0)
end;
begin
read(n);
while P(n) do
begin
writeln('Простое число');
read(n);
if P(n)- P(n+1)=2 then
writeln('Близнецы');
end;
end.


спросил от Начинающий (153 баллов) в категории Информатика
оставил комментарий от Доцент (53.1k баллов)

массивы можно использовать? или последовательности или чтото вроде этого?

оставил комментарий от Доцент (53.1k баллов)

предлагаемый тут метод вообще не оптимален. Оптимально сначала найти все простые числа до 2n а потом перебрать те что в тебуемом диапазоне и узнавать разницу

1 Ответ
0 голосов
ответил от Доцент (53.1k баллов)
 
Лучший ответ

Var
    n, i, prev: integer;

function IsSimpleNumber(n: integer): boolean;
var
    i: integer;
begin
    IsSimpleNumber := true;
    
    for i := 2 to round(sqrt(n) + 1) do
        if n mod i = 0 then begin
            IsSimpleNumber := false;
            exit;
        end;
end;

begin
    read(n);
    prev := 0;
    
    for i := n to 2 * n do
        if IsSimpleNumber(i) then
            if prev = 0 then
                prev := i
            else if i - prev = 2 then begin
                writeln(i, ', ', prev, ' - близнецы');
                halt;
            end
            else prev := i;
    
    writeln('Близнецов нет');
end.

оставил комментарий от Начинающий (153 баллов)

но так как учитель такую команду ни разу не показывала, то мы её не должны использовать

оставил комментарий от Доцент (53.1k баллов)

бред это. типа вы справкой не пользуетесь и не ищете то что вам надо.

оставил комментарий от Начинающий (153 баллов)

сказано нельзя, значит нельзя

оставил комментарий от Доцент (53.1k баллов)

а самому тебе как понятнее через фор или через вайл?

оставил комментарий от Начинающий (153 баллов)

через фор мне понятнее

оставил комментарий от Доцент (53.1k баллов)

можно так

оставил комментарий от Доцент (53.1k баллов)

function IsSimpleNumber(n: integer): boolean;
var
i: integer;
begin
IsSimpleNumber := true;

i := 2;
while i * i <= n do <br> begin
if n mod i = 0 then begin
IsSimpleNumber := false;
exit;
end;
i := i + 1;
end;
end;

оставил комментарий от Начинающий (153 баллов)

о, вот это подходит, огромнейшее спасибо

оставил комментарий от Начинающий (153 баллов)

ещё вопрос, а что такое halt

оставил комментарий от Начинающий (153 баллов)

всё, разобрался с этой командой

...