Помощь - Поиск - Пользователи - Календарь
Полная версия: помогите написать программу с процедурами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
aigulia
Два простых числа называются «близнецами», если они отличаются друг от друга на 2 (таковы, например, числа 41 и 43). Напечатать все пары близнецов из отрезка [n,2n], где n – заданное целое число, большее 2.
Спасибо, заранее!!
Turbo Pascal
Freedom
 var i,a,n,j:longint;
prostoe:integer;
begin
writeln('BBEDUTE N');
readln(n);
For i:=n to 2*n do begin
For j:=2 to 30 do If (i mod j=0) or ((i+2) mod j=0) then inc(Prostoe);
If i<=30 then If prostoe=1 then writeln(i,' ',i+2);
If i>30 then If prostoe=0 then writeln(i,' ',i+2);
prostoe:=0;
end;
readln;
end.

Вот как то так наверное. Может быть можно попроще какнибудь
volvo
Есть очень интересный способ определения "близнецов" одной формулой, не проверяя отдельно простоту обоих чисел:
// проверялось на FPC
function fact(n: integer): int64;
var i: integer;
begin
result := 1;
for i := 1 to n do
result := result * i
end;

var
i, n: integer;
value: int64;
begin
n := 10;
for i := n to 2 * n do
begin
value := 4*fact(i-1) + i + 4;
if value mod (i*(i+2)) = 0 then writeln(i:4, i + 2:4);
end;
end.

т.е., если (4*(n - 1)! + n + 4) mod (n * (n + 2)) = 0, то пара чисел n и n+2 - "близнецы". К сожалению, в данном случае он наверное неприменим, из-за сложности с вычислением факториалов чисел больших, чем 13. Но если в программе уже есть использование длинной арифметики (или в языке - типы, способные хранить огромные значения), то этот способ будет выигрышным...
aigulia
Freedom, volvo, Огромное вам спасибо!!!!
Оба ответа ОЧЕНЬ пригодились)
Lapp
Цитата(aigulia @ 1.06.2010 15:31) *
Freedom, volvo, Огромное вам спасибо!!!!
Оба ответа ОЧЕНЬ пригодились)
Вау! aigulia ответила!! вот уж, не ждал.. ))

"Спасибо" интерпретирую как просьбу поднять репу Freedom'у и volvo, и с удовольствием это делаю.. ))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.