Pascal. Помогите, пожалуйста, исправить ошибку. Оптимизировать код и т.п. не прошу, мне...

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

Pascal. Помогите, пожалуйста, исправить ошибку. Оптимизировать код и т.п. не прошу, мне только надо заставить этот код работать правильно, все остальное я уже сделаю сама. Сама программа должна по заданному числу N находить такие числа a и b, которые в сумме будут давать N и их НОД будет максимален. (т.е. их НОД будет больше НОДа в любой другой такой паре).

Function nod (var a,b: integer): integer;
Var c: integer;
Begin
Repeat
if a > b then
a:= a mod b
else
b:= b mod a;
until (a = 0) or (b = 0);
nod:= a + b;
End;
Var a,a1,a2,max,a3,a4:int64;
Begin
Readln(a);
a1:= a div 2;
a2:= (a div 2)+1;
max:=1;
if a mod 2 = 0 then Writeln (a div 2,' ',a div 2)
else
while a1>0 do
begin
if NOD(a1,a2) > max then max:= NOD(a1,a2);
a1:=a1-1;
a2:=a2+1;
end;
a1:= a div 2;
a2:= (a div 2)+1;
while a1>0 do
begin
if NOD(a1,a2) = max then a1:=a3, a2:=a4;
a1:=a1-1;
a2:=a2+1;
end;
Writeln(a3,' ',a4);
End.


Информатика | 32 просмотров
0

Выдает сразу две ошибки.

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

Function nod (a,b: integer): integer;
Begin
Repeat
if a > b then
a:= a mod b
else
b:= b mod a;
until (a = 0) or (b = 0);
nod:= a + b;
End; 
Var n,max,i:int64; 
Begin 
write('n = ');
Readln(n);
max:=0;
if n mod 2 = 0 
 then max:=n div 2
 else for i:=1 to n div 2 do
       if nod(i,n-i)>max then max:=i;
writeln(max,' ',n-max,' ' ,nod(max,n-max));
End.

Пример:
n = 11111
271 10840 271

(194k баллов)