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

0 голосов
115 просмотров

Плиииииз.....паскаль Дано натуральное число 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 баллов) | 115 просмотров
0

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

0

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

Дан 1 ответ
0 голосов
Правильный ответ

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.

(53.1k баллов)
0

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

0

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

0

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

0

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

0

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

0

можно так

0

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;

0

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

0

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

0

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