Консультация № 131416
09.04.2008, 21:16
0.00 руб.
0 2 2
Погоите,кто-нибудь решить задачку....за ранее премного благодарен!

Два простых числа называются "близнецами", если они отличаются друг от друга на 2 (например, 41 и 43). Напечатать все пары "близнецов" из отрезка [n, 2n], где n — заданное натуральное число больше 2.

Обсуждение

Неизвестный
09.04.2008, 22:55
общий
это ответ
Здравствуйте, Денисов Игорь Александрович!
Код в приложении.
Для определения простое ли число, использованна функция эксперта SHERRY из вопроса №124311.
Удачи!!!

Приложение:
function prost(var ch:integer):boolean;var rez:boolean; z,r:integer;begin rez:=true; z:=ch; for r:=2 to (z div 2) do begin if (z mod r) = 0 then begin rez:=false; break; end; end; prost:=rez;end;var i, n, x:integer;begin Write(‘Введите N: ‘); ReadLn(n); for i:=n to 2*n do begin x:=i+2; if prost(i) and prost(x) and (x<=2*n) then Writeln(i, ‘ и ‘, i+2); end; ReadLn;end.
Неизвестный
09.04.2008, 23:00
общий
это ответ
Здравствуйте, Денисов Игорь Александрович!
Для решения Вашей задачи можно задать функцию проверки на простоту, которой проверять каждые парные числа на отрезке. Вообще, можно было бы уменьшить число проверок, возможно, введя какие-то флаги, чтобы не проверять дважды одно число, но это загромоздит код. А так мы просто задаём цикл, в котором i будет меняться от n до n-2 (последняя возможная пара - это n-4 и n-2, поэтому рассматривать отрезок дальше не имеет смысла), и проверяем текущее и парное ему значения на простоту (если оба числа простые - выводим их на экран).
PS: Есть отличия от предыдущего решения в варианте реализации цикла - отсутствует дополнительная проверка.
Удачи!

Приложение:
Var n, i: word;function Prost (a: word): boolean; {Функция проверки, простое ли число}Var i: integer;begin Prost:= true; {Начальное значениефункции} if (a<=1) then Prost:= false; {Простые числа строго больше 1 } for i:=2 to a div 2 do {Для доказательства простоты достаточно проверить делимость на числа от 2 и до половины данного числа} if a mod i = 0 then begin Prost:= false; break; end; {Если хоть раз поделилось - не простое}end;begin readln (n); {Считываем n} i:= n; {Начинаем с левого конца отрезка} while (i+2<=2*n) do {И двигаемся, пока парное текущему число не выйдет за границы отрезка} begin if (Prost (i)) and (Prost (i+2)) then {Если текущее число и парное ему - простые} writeln (i, ‘ - ‘, (i+2)); {Выводим их на экран} inc (i); {Наращиваем число на 1} end;end.
Форма ответа