Добавил:
bagiwow
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
ѓ« ў 1. ЏҐаҐ¬ҐлҐ, ўла ¦ҐЁп, ЇаЁбў Ёў Ёп.
1.1. ‡ ¤ зЁ ЎҐ§ ¬ ббЁў®ў
1.1.1. „ л ¤ўҐ жҐ«лҐ ЇҐаҐ¬ҐлҐ a, b. ‘®бв ўЁвм да Ј¬Ґв
Їа®Ја ¬¬л, Ї®б«Ґ ЁбЇ®«ҐЁп Є®в®а®Ј® § зҐЁп ЇҐаҐ¬Ґле Ї®¬Ґп-
«Ёбм Ўл ¬Ґбв ¬Ё (®ў®Ґ § 票Ґ a а ў® бв ஬㠧 票о b Ё -
®Ў®а®в).
ђҐиҐЁҐ. ‚ўҐ¤Ґ¬ ¤®Ї®«ЁвҐ«мго 楫го ЇҐаҐ¬Ґго t.
t := a;
a := b;
b := t;
Џ®ЇлвЄ ®Ў®©вЁбм ЎҐ§ ¤®Ї®«ЁвҐ«м®© ЇҐаҐ¬Ґ®©, ЇЁб ў
a := b;
b := a;
Ґ ЇаЁў®¤Ёв Є 楫Ё (ЎҐ§ў®§ўа в® гва зЁў Ґвбп з «м®Ґ § 票Ґ
ЇҐаҐ¬Ґ®© a).
1.1.2. ђҐиЁвм ЇаҐ¤л¤гйго § ¤ зг, Ґ ЁбЇ®«м§гп ¤®Ї®«Ё-
⥫мле ЇҐаҐ¬Ґле (Ё ЇаҐ¤Ї®« Ј п, зв® § 票ﬨ 楫ле ЇҐаҐ¬Ґ-
ле ¬®Јгв Ўлвм Їа®Ё§ў®«млҐ жҐ«лҐ зЁб« ).
ђҐиҐЁҐ. (Ќ з «млҐ § 票п a Ё b ®Ў®§ зЁ¬ a0, b0.)
a := a + b; {a = a0 + b0, b = b0}
b := a - b; {a = a0 + b0, b = a0}
a := a - b; {a = b0, b = a0}
1.1.3. „ ® 楫®Ґ зЁб«® Ё вга «м®Ґ (楫®Ґ Ґ®ваЁж -
⥫쮥) зЁб«® n. ‚лзЁб«Ёвм ў б⥯ҐЁ n. „агЈЁ¬Ё б«®ў ¬Ё, Ґ-
®Ўе®¤Ё¬® б®бв ўЁвм Їа®Ја ¬¬г, ЇаЁ ЁбЇ®«ҐЁЁ Є®в®а®© § 票п
ЇҐаҐ¬Ґле Ё n Ґ ¬Ґповбп, § 票Ґ ҐЄ®в®а®© ¤агЈ®© ЇҐаҐ-
¬Ґ®© ( ЇаЁ¬Ґа, b) бв ®ўЁвбп а ўл¬ ў б⥯ҐЁ n. (ЏаЁ н⮬
а §аҐи Ґвбп ЁбЇ®«м§®ў вм Ё ¤агЈЁҐ ЇҐаҐ¬ҐлҐ.)
ђҐиҐЁҐ. ‚ўҐ¤Ґ¬ 楫го ЇҐаҐ¬Ґго k, Є®в®а п ¬ҐпҐвбп ®в 0
¤® n, ЇаЁзҐ¬ Ї®¤¤Ґа¦Ёў Ґвбп в Є®Ґ бў®©бвў®: b = (a ў б⥯ҐЁ
k).
k := 0; b := 1;
{b = a ў б⥯ҐЁ k}
while k <> n do begin
| k := k + 1;
| b := b * a;
end;
„агЈ®Ґ аҐиҐЁҐ в®© ¦Ґ § ¤ зЁ:
k := n; b := 1;
{a ў б⥯ҐЁ n = b * (a ў б⥯ҐЁ k)}
while k <> 0 do begin
| k := k - 1;
| b := b * a;
end;
1.1.4. ђҐиЁвм ЇаҐ¤л¤гйго § ¤ зг, Ґб«Ё вॡгҐвбп, зв®Ўл зЁб-
«® ¤Ґ©бвўЁ© (ўлЇ®«пҐ¬ле ®ЇҐа в®а®ў ЇаЁбў Ёў Ёп) Ўл«® Ї®ап¤Є
log n (в® Ґбвм Ґ ЇаҐў®б室Ё«® Ўл C*log n ¤«п ҐЄ®в®а®© Є®бв -
вл C; log n - нв® б⥯Ґм, ў Є®в®аго 㦮 ў®§ўҐбвЁ 2, зв®Ўл Ї®-
«гзЁвм n).
ђҐиҐЁҐ. ‚ҐбҐ¬ ҐЄ®в®алҐ Ё§¬ҐҐЁп ў® ўв®а®Ґ Ё§ ЇаҐ¤«®¦Ґ-
ле аҐиҐЁ© ЇаҐ¤л¤г饩 § ¤ зЁ:
k := n; b := 1; c:=a;
{a ў б⥯ҐЁ n = b * (c ў б⥯ҐЁ k)}
while k <> 0 do begin
| if k mod 2 = 0 then begin
| | k:= k div 2;
| | c:= c*c;
| end else begin
| | k := k - 1;
| | b := b * c;
| end;
end;
Љ ¦¤л© ўв®а®© а § (Ґ ०Ґ) Ўг¤Ґв ўлЇ®«пвмбп ЇҐаўл© ў аЁ в
®ЇҐа в®а ўлЎ®а (Ґб«Ё k ҐзҐв®, в® Ї®б«Ґ ўлзЁв Ёп Ґ¤ЁЁжл
бв ®ўЁвбп зҐвл¬), в Є зв® § ¤ў жЁЄ« ўҐ«ЁзЁ k 㬥ми Ґвбп
Ї® Єа ©Ґ© ¬ҐаҐ ў¤ў®Ґ.
1.1.5. „ л вга «млҐ зЁб« , b. ‚лзЁб«Ёвм Їа®Ё§ўҐ¤ҐЁҐ
*b, ЁбЇ®«м§гп ў Їа®Ја ¬¬Ґ «Ёим ®ЇҐа жЁЁ +, -, =, <>.
ђҐиҐЁҐ.
var a, b, c, k : integer;
k := 0; c := 0;
{Ёў аЁ в: c = a * k}
while k <> b do begin
| k := k + 1;
| c := c + a;
end;
{c = a * k Ё k = b, б«Ґ¤®ў ⥫м®, c = a * b}
1.1.6. „ л вга «млҐ зЁб« Ё b. ‚лзЁб«Ёвм Ёе б㬬г
+b. €бЇ®«м§®ў вм ®ЇҐа в®ал ЇаЁбў Ёў Ёп «Ёим ўЁ¤
<ЇҐаҐ¬Ґ п1> := <ЇҐаҐ¬Ґ п2>,
<ЇҐаҐ¬Ґ п> := <зЁб«®>,
<ЇҐаҐ¬Ґ п1> := <ЇҐаҐ¬Ґ п2> + 1.
ђҐиҐЁҐ.
...
{Ёў аЁ в: c = a + k}
...
1.1.7. „ ® вга «м®Ґ (楫®Ґ Ґ®ваЁж ⥫쮥) зЁб«® Ё
楫®Ґ Ї®«®¦ЁвҐ«м®Ґ зЁб«® d. ‚лзЁб«Ёвм з б⮥ q Ё ®бв в®Є r ЇаЁ
¤Ґ«ҐЁЁ d, Ґ ЁбЇ®«м§гп ®ЇҐа жЁ© div Ё mod.
ђҐиҐЁҐ. ‘®Ј« б® ®ЇаҐ¤Ґ«ҐЁо, a = q * d + r, 0 <= r < d.
{a >= 0; d > 0}
r := a; q := 0;
{Ёў аЁ в: a = q * d + r, 0 <= r}
while not (r < d) do begin
| {r >= d}
| r := r - d; {r >= 0}
| q := q + 1;
end;
1.1.8. „ ® вга «м®Ґ n, ўлзЁб«Ёвм n!
(0!=1, n! = n * (n-1)!).
1.1.9. Џ®б«Ґ¤®ў ⥫м®бвм ”ЁЎ® ззЁ ®ЇаҐ¤Ґ«пҐвбп в Є:
a(0)= 1, a(1) = 1, a(k) = a(k-1) + a(k-2) ЇаЁ k >= 2. „ ® n,
ўлзЁб«Ёвм a(n).
1.1.10. ’ ¦Ґ § ¤ з , Ґб«Ё вॡгҐвбп, зв®Ўл зЁб«® ®ЇҐа жЁ©
Ўл«® Їа®Ї®ажЁ® «м® log n. (ЏҐаҐ¬ҐлҐ ¤®«¦л Ўлвм 楫®зЁб«Ґ-
л¬Ё.)
“Є § ЁҐ. Џ а б®бҐ¤Ёе зЁбҐ« ”ЁЎ® ззЁ Ї®«гз Ґвбп Ё§ ЇаҐ-
¤л¤г饩 㬮¦ҐЁҐ¬ ¬ ваЁжг
|1 1|
|1 0|
в Є зв® § ¤ з бў®¤Ёвбп Є ў®§ўҐ¤ҐЁо ¬ ваЁжл ў б⥯Ґм n. ќв®
¬®¦® ᤥ« вм § C*log n ¤Ґ©бвўЁ© ⥬ ¦Ґ бЇ®б®Ў®¬, зв® Ё ¤«п зЁ-
ᥫ.
1.1.11. „ ® вга «м®Ґ n, ўлзЁб«Ёвм 1/0!+1/1!+...+1/n!.
1.1.12. ’® ¦Ґ, Ґб«Ё вॡгҐвбп, зв®Ўл Є®«ЁзҐбвў® ®ЇҐа жЁ©
(ўлЇ®«Ґле Є®¬ ¤ ЇаЁбў Ёў Ёп) Ўл«® Ўл Ґ Ў®«ҐҐ C*n ¤«п Ґ-
Є®в®а®© Є®бв вл ‘.
ђҐиҐЁҐ. €ў аЁ в: sum = 1/1! +...+ 1/k!, last = 1/k!
(ў ¦® Ґ ўлзЁб«пвм § ®ў® Є ¦¤л© а § k!).
1.1.13. „ л ¤ў вга «мле зЁб« a Ё b, Ґ а ўлҐ г«о
®¤®ўаҐ¬Ґ®. ‚лзЁб«Ёвм ЌЋ„ (a,b) - ЁЎ®«миЁ© ®ЎйЁ© ¤Ґ«ЁвҐ«м
Ё b.
ђҐиҐЁҐ (1 ў аЁ в).
if a > b then begin
| k := a;
end else begin
| k := b;
end;
{k = max (a,b)}
{Ёў аЁ в: ЁЄ Є®Ґ зЁб«®, Ў®«м襥 k, Ґ пў«пҐвбп ®Ў-
йЁ¬ ¤Ґ«ЁвҐ«Ґ¬}
while not (((a mod k)=0) and ((b mod k)=0)) do begin
| k := k - 1;
end;
{k - ®ЎйЁ© ¤Ґ«ЁвҐ«м, Ў®«миЁҐ - Ґв}
(2 ў аЁ в - «Ј®аЁв¬ …ўЄ«Ё¤ ). Ѓг¤Ґ¬ бзЁв вм , зв® ЌЋ„
(0,0) = 0. ’®Ј¤ ЌЋ„ (a,b) = ЌЋ„ (a-b,b) = ЌЋ„ (a,b-a); ЌЋ„
(a,0) = ЌЋ„ (0,a) = a ¤«п ўбҐе a,b>=0.
m := a; n := b;
{Ёў аЁ в: ЌЋ„ (a,b) = ЌЋ„ (m,n); m,n >= 0 }
while not ((m=0) or (n=0)) do begin
| if m >= n then begin
| | m := m - n;
| end else begin
| | n := n - m;
| end;
end;
if m = 0 then begin
| k := n;
end else begin
| k := m;
end;
1.1.14. Ќ ЇЁб вм ¬®¤ЁдЁжЁа®ў л© ў аЁ в «Ј®аЁв¬ …ўЄ«Ё-
¤ , ЁбЇ®«м§гойЁ© б®®в®иҐЁп ЌЋ„ (a, b) = ЌЋ„ (a mod b, b) ЇаЁ
a >= b, ЌЋ„ (a, b) = ЌЋ„ (a, b mod a) ЇаЁ b >= a.
1.1.15. „ л вга «млҐ Ё b, Ґ а ўлҐ 0 ®¤®ўаҐ¬Ґ®.
Ќ ©вЁ d = ЌЋ„ (a,b) Ё в ЄЁҐ жҐ«лҐ x Ё y, зв® d = a*x + b*y.
ђҐиҐЁҐ. „®Ў ўЁ¬ ў «Ј®аЁв¬ …ўЄ«Ё¤ ЇҐаҐ¬ҐлҐ p, q, r, s
Ё ўЇЁиҐ¬ ў Ёў аЁ в гб«®ўЁп m = p*a + q*b; n = r*a + s*b.
m:=a; n:=b; p := 1; q := 0; r := 0; s := 1;
{Ёў аЁ в: ЌЋ„ (a,b) = ЌЋ„ (m,n); m,n >= 0
m = p*a + q*b; n = r*a + s*b.}
while not ((m=0) or (n=0)) do begin
| if m >= n then begin
| | m := m - n; p := p - r; q := q - s;
| end else begin
| | n := n - m; r := r - p; s := s - q;
| end;
end;
if m = 0 then begin
| k :=n; x := r; y := s;
end else begin
| k := m; x := p; y := q;
end;
1.1.16. ђҐиЁвм ЇаҐ¤л¤гйго § ¤ зг, ЁбЇ®«м§гп ў «Ј®аЁв¬Ґ
…ўЄ«Ё¤ ¤Ґ«ҐЁҐ б ®бв вЄ®¬.
1.1.17. (ќ.„Ґ©Єбва ). „®Ў ўЁ¬ ў «Ј®аЁв¬ …ўЄ«Ё¤ ¤®Ї®«Ё-
⥫млҐ ЇҐаҐ¬ҐлҐ u, v, z:
m := a; n := b; u := b; v := a;
{Ёў аЁ в: ЌЋ„ (a,b) = ЌЋ„ (m,n); m,n >= 0 }
while not ((m=0) or (n=0)) do begin
| if m >= n then begin
| | m := m - n; v := v + u;
| end else begin
| | n := n - m; u := u + v;
| end;
end;
if m = 0 then begin
| z:= v;
end else begin {n=0}
| z:= u;
end;
„®Є § вм, зв® Ї®б«Ґ ЁбЇ®«ҐЁп «Ј®аЁв¬ z а ў® г¤ў®Ґ®¬г -
Ё¬Ґм襬㠮ЎйҐ¬г Єа ⮬г зЁбҐ« a, b: z = 2 * ЌЋЉ (a,b).
ђҐиҐЁҐ. ‡ ¬ҐвЁ¬, зв® ўҐ«ЁзЁ m*u + n*v Ґ ¬ҐпҐвбп ў 室Ґ
ўлЇ®«ҐЁп «Ј®аЁв¬ . Ћбв Ґвбп ў®бЇ®«м§®ў вмбп ⥬, зв® ў з «Ґ
® а ў 2*a*b Ё зв® ЌЋ„ (a, b) * ЌЋЉ (a, b) = a*b.
1.1.18. Ќ ЇЁб вм ў аЁ в «Ј®аЁв¬ …ўЄ«Ё¤ , ЁбЇ®«м§гойЁ©
б®®в®иҐЁп
ЌЋ„(2*a, 2*b) = 2*ЌЋ„(a,b)
ЌЋ„(2*a, b) = ЌЋ„(a,b) ЇаЁ ҐзҐв®¬ b,
Ґ ўЄ«оз ойЁ© ¤Ґ«ҐЁп б ®бв вЄ®¬, ЁбЇ®«м§гойЁ© «Ёим ¤Ґ«ҐЁҐ
2 Ё Їа®ўҐаЄг зҐв®бвЁ. (—Ёб«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є log k
¤«п Ёб室ле ¤ ле, Ґ ЇаҐў®б室пйЁе k.)
ђҐиҐЁҐ.
m:= a; n:=b; d:=1;
{ЌЋ„(a,b) = d * ЌЋ„(m,n)}
while not ((m=0) or (n=0)) do begin
| if (m mod 2 = 0) and (n mod 2 = 0) then begin
| | d:= d*2; m:= m div 2; n:= n div 2;
| end else if (m mod 2 = 0) and (n mod 2 = 1) then begin
| | m:= m div 2;
| end else if (m mod 2 = 1) and (n mod 2 = 0) then begin
| | n:= n div 2;
| end else if (m mod 2=1) and (n mod 2=1) and (m>=n)then begin
| | m:= m-n;
| end else if (m mod 2=1) and (n mod 2=1) and (m<=n)then begin
| | n:= n-m;
| end;
end;
{m=0 => ®вўҐв=d*n; n=0 => ®вўҐв=d*m}
ЋжҐЄ зЁб« ¤Ґ©бвўЁ©: Є ¦¤®Ґ ўв®а®Ґ ¤Ґ©бвўЁҐ ¤Ґ«Ёв е®вп Ўл ®¤®
Ё§ зЁбҐ« m Ё n Ї®Ї®« ¬.
1.1.19. „®Ї®«Ёвм «Ј®аЁв¬ ЇаҐ¤л¤г饩 § ¤ зЁ Ї®ЁбЄ®¬ x Ё y,
¤«п Є®в®але ax+by=ЌЋ„(a,b).
ђҐиҐЁҐ. (€¤Ґп б®®ЎйҐ „.‡ў®ЄЁл¬) ЏаҐ¦¤Ґ ўбҐЈ® § ¬ҐвЁ¬,
зв® ®¤®ўаҐ¬Ґ®Ґ ¤Ґ«ҐЁҐ a Ё b Ї®Ї®« ¬ Ґ ¬ҐпҐв ЁбЄ®¬ле x Ё y.
Џ®н⮬㠬®¦® бзЁв вм, зв® б б ¬®Ј® з « ®¤® Ё§ зЁбҐ« a Ё b
ҐзҐв®. (ќв® бў®©бвў® Ўг¤Ґв б®еа пвмбп Ё ¤ «ҐҐ.)
’ҐЇҐам Ї®Їлв Ґ¬бп, Є Є Ё а миҐ, еа Ёвм в ЄЁҐ зЁб«
p,q,r,s, зв®
m = ap + bq
n = ar + bs
Џа®Ў«Ґ¬ ў ⮬, зв® ЇаЁ ¤Ґ«ҐЁЁ, бЄ ¦Ґ¬, m 2 ¤® а §¤Ґ«Ёвм p
Ё q 2, Ё ®Ё ЇҐаҐбв гв Ўлвм 楫묨 ( бв гв ¤ў®Ёз®-а жЁ-
® «мл¬Ё). „ў®Ёз®-а жЁ® «м®Ґ зЁб«® ҐбвҐб⢥® еа Ёвм ў ўЁ-
¤Ґ Ї ал (зЁб«ЁвҐ«м, Ї®Є § ⥫м б⥯ҐЁ ¤ў®©ЄЁ ў § ¬Ґ ⥫Ґ). ‚
Ёв®ЈҐ ¬л Ї®«гз Ґ¬ d ў ўЁ¤Ґ Є®¬ЎЁ жЁЁ a Ё b б ¤ў®Ёз®-а жЁ-
® «мл¬Ё Є®нддЁжЁҐв ¬Ё. €л¬Ё б«®ў ¬Ё, ¬л Ё¬ҐҐ¬
(2 ў б⥯ҐЁ i)* d = ax + by
¤«п ҐЄ®в®але 楫ле x,y Ё вга «м®Ј® i. —в® ¤Ґ« вм, Ґб«Ё i >
1? …б«Ё x Ё y зсвл, в® 2 ¬®¦® б®Єа вЁвм. …б«Ё нв® Ґ в Є,
Ї®«®¦ҐЁҐ ¬®¦® ЁбЇа ўЁвм ЇаҐ®Ўа §®ў ЁҐ¬
x := x + b
y := y - a
(®® Ґ ¬ҐпҐв ax+by). “ЎҐ¤Ё¬бп ў н⮬. Ќ Ї®¬Ё¬, зв® ¬л бзЁв -
Ґ¬, зв® ®¤® Ё§ зЁбҐ« a Ё b Ґзсв®. Џгбвм нв® Ўг¤Ґв a. …б«Ё ЇаЁ
н⮬ y зсв®, в® Ё x ¤®«¦® Ўлвм зсвл¬ (Ё зҐ ax+by Ўг¤Ґв Ґ-
зсвл¬). Ђ ЇаЁ Ґзс⮬ y ўлзЁв ЁҐ Ё§ ҐЈ® сзҐв®Ј® a ¤Ґ« Ґв y
зсвл¬.
1.1.20. ‘®бв ўЁвм Їа®Ја ¬¬г, ЇҐз в ойго Єў ¤а вл ўбҐе вг-
а «мле зЁбҐ« ®в 0 ¤® § ¤ ®Ј® вга «м®Ј® n.
ђҐиҐЁҐ.
k:=0;
writeln (k*k);
{Ёў аЁ в: k<=n, ЇҐз в л ўбҐ
Єў ¤а вл ¤® k ўЄ«озЁвҐ«м®}
while not (k=n) do begin
| k:=k+1;
| writeln (k*k);
end;
1.1.21. ’ ¦Ґ § ¤ з , ® а §аҐи Ґвбп ЁбЇ®«м§®ў вм Ё§ аЁд-
¬ҐвЁзҐбЄЁе ®ЇҐа жЁ© «Ёим б«®¦ҐЁҐ Ё ўлзЁв ЁҐ, ЇаЁзҐ¬ ®ЎйҐҐ зЁб-
«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є n.
ђҐиҐЁҐ. ‚ўҐ¤Ґ¬ ЇҐаҐ¬Ґго k_square (square - Єў ¤а в),
бўп§ го б k б®®в®иҐЁҐ¬ k_square = k*k:
k := 0; k_square := 0;
writeln (k_square);
while not (k = n) do begin
| k := k + 1;
| {k_square = (k-1) * (k-1) = k*k - 2*k + 1}
| k_square := k_square + k + k - 1;
| writeln (k_square);
end;
1.1.22. ‘®бв ўЁвм Їа®Ја ¬¬г, ЇҐз в ойго а §«®¦ҐЁҐ Їа®б-
влҐ ¬®¦ЁвҐ«Ё § ¤ ®Ј® вга «м®Ј® зЁб« n > 0 (¤агЈЁ¬Ё б«®ў -
¬Ё, вॡгҐвбп ЇҐз в вм в®«мЄ® Їа®бвлҐ зЁб« Ё Їа®Ё§ўҐ¤ҐЁҐ ЇҐ-
з в ле зЁбҐ« ¤®«¦® Ўлвм а ў® n; Ґб«Ё n = 1, ЇҐз в вм ЁзҐЈ®
Ґ ¤®).
ђҐиҐЁҐ (1 ў аЁ в).
k := n;
{Ёў аЁ в: Їа®Ё§ўҐ¤ҐЁҐ ЇҐз в ле зЁбҐ« Ё k а ў®
n, ЇҐз в л в®«мЄ® Їа®бвлҐ зЁб« }
while not (k = 1) do begin
| l := 2;
| {Ёў аЁ в: k Ґ Ё¬ҐҐв ¤Ґ«ЁвҐ«Ґ© ў ЁвҐаў «Ґ (1,l)}
| while k mod l <> 0 do begin
| | l := l + 1;
| end;
| {l - Ё¬ҐмиЁ© ¤Ґ«ЁвҐ«м k, Ў®«миЁ© 1, б«Ґ¤®ў ⥫м®,
| Їа®бв®©}
| writeln (l);
| k:=k div l;
end;
(2 ў аЁ в).
k := n; l := 2;
{Їа®Ё§ўҐ¤ҐЁҐ k Ё ЇҐз в ле зЁбҐ« а ў® n; ЇҐз -
в лҐ зЁб« Їа®бвл; k Ґ Ё¬ҐҐв ¤Ґ«ЁвҐ«Ґ©, ¬ҐмиЁе l}
while not (k = 1) do begin
| if k mod l = 0 then begin
| | {k ¤Ґ«Ёвбп l Ё Ґ Ё¬ҐҐв ¤Ґ«ЁвҐ«Ґ©,
| | ¬ҐмиЁе l, § зЁв, l Їа®бв®}
| | k := k div l;
| | writeln (l);
| end else begin
| | { k Ґ ¤Ґ«Ёвбп l }
| | l := l + 1;
| end;
end;
1.1.23. ‘®бв ўЁвм Їа®Ја ¬¬г аҐиҐЁп ЇаҐ¤л¤г饩 § ¤ зЁ, Ёб-
Ї®«м§гойго в®в д Єв, зв® б®бв ў®Ґ зЁб«® Ё¬ҐҐв ¤Ґ«ЁвҐ«м, Ґ
ЇаҐў®б室пйЁ© Єў ¤а в®Ј® Є®ап Ё§ нв®Ј® зЁб« .
ђҐиҐЁҐ. ‚® ўв®а®¬ ў ਠ⥠аҐиҐЁп ў¬Ґбв® l:=l+1 ¬®¦® -
ЇЁб вм
if l*l > k then begin
| l:=k;
end else begin
| l:=l+1;
end;
1.1.24. Џа®ўҐаЁвм, пў«пҐвбп «Ё § ¤ ®Ґ вга «м®Ґ зЁб«®
n > 1 Їа®бвл¬.
1.1.25. („«п § Є®¬ле б ®б®ў ¬Ё «ЈҐЎал). „ ® 楫®Ґ Ј -
гбб®ў® зЁб«® n + mi (ЇаЁ ¤«Ґ¦ 饥 Z[i]). (a) Џа®ўҐаЁвм, пў«п-
Ґвбп «Ё ®® Їа®бвл¬ (ў Z[i]); (Ў) ЇҐз в вм ҐЈ® а §«®¦ҐЁҐ
Їа®бвлҐ (ў Z[i]) ¬®¦ЁвҐ«Ё.
1.1.26. ђ §аҐиЁ¬ ЁбЇ®«м§®ў вм Є®¬ ¤л write (i) «Ёим ЇаЁ i
= 0,1,2,...,9. ‘®бв ўЁвм Їа®Ја ¬¬г, ЇҐз в ойго ¤ҐбпвЁзго § -
ЇЁбм § ¤ ®Ј® вга «м®Ј® зЁб« n > 0. (‘«гз © n = 0 пўЁ«бп
Ўл ҐЄ®в®ал¬ ЁбЄ«о票Ґ¬, в Є Є Є ®Ўлз® г«Ё ў з «Ґ зЁб« Ґ
ЇҐз в овбп, ¤«п n = 0 - ЇҐз в овбп.)
ђҐиҐЁҐ.
base:=1;
{base - б⥯Ґм 10, Ґ ЇаҐў®б室пй п n}
while 10 * base <= n do begin
| base:= base * 10;
end;
{base - ¬ ЄбЁ¬ «м п б⥯Ґм 10, Ґ ЇаҐў®б室пй п n}
k:=n;
{Ёў аЁ в: ®бв «®бм ЇҐз в вм k б ⥬ ¦Ґ зЁб«®¬
§ Є®ў, зв® ў base; base = 100..00}
while base <> 1 do begin
| write(k div base);
| k:= k mod base;
| base:= base div 10;
end;
{base=1; ®бв «®бм ЇҐз в вм ®¤®§ 箥 зЁб«® k}
write(k);
(’ЁЇЁз п ®иЁЎЄ ЇаЁ аҐиҐЁЁ нв®© § ¤ зЁ: ҐЇа ўЁ«м® ®Ўа Ў вл-
ў овбп зЁб« б г«п¬Ё Ї®бҐаҐ¤ЁҐ. ЏаЁўҐ¤Ґл© Ёў аЁ в ¤®ЇгбЄ -
Ґв б«гз ©, Є®Ј¤ k < base; ў н⮬ б«гз Ґ ЇҐз в ЁҐ k зЁ Ґвбп
б® бв аиЁе г«Ґ©.)
1.1.27. ’® ¦Ґ б ¬®Ґ, ® ¤® ЇҐз в вм ¤ҐбпвЁзго § ЇЁбм ў
®Ўа ⮬ Ї®ап¤ЄҐ. („«п n = 173 ¤® ЇҐз в вм 371.)
ђҐиҐЁҐ.
k:= n;
{Ёў аЁ в: ®бв «®бм ЇҐз в вм k ў ®Ўа ⮬ Ї®ап¤ЄҐ}
while k <> 0 do begin
| write (k mod 10);
| k:= k div 10;
end;
1.1.28. „ ® вга «м®Ґ n. Џ®¤бзЁв вм Є®«ЁзҐбвў® аҐиҐЁ©
Ґа ўҐбвў x*x + y*y < n ў вга «мле (Ґ®ваЁж ⥫мле 楫ле)
зЁб« е, Ґ ЁбЇ®«м§гп ¤Ґ©бвўЁ© б ўҐйҐб⢥묨 зЁб« ¬Ё.
ђҐиҐЁҐ.
k := 0; s := 0;
{Ёў аЁ в: s = Є®«ЁзҐбвў® аҐиҐЁ© Ґа ўҐбвў
x*x + y*y < n c x < k}
while k*k < n do begin
| ...
| {t = зЁб«® аҐиҐЁ© Ґа ўҐбвў k*k + y*y < n
| (ЇаЁ ¤ ®¬ k) }
| k := k + 1;
| s := s + t;
end;
{k*k >= n, Ї®н⮬г s = Є®«ЁзҐбвў® ўбҐе аҐиҐЁ©
Ґа ўҐбвў }
‡¤Ґбм ... - Ї®Є ҐйҐ Ґ ЇЁб л© Єгб®Є Їа®Ја ¬¬л, Є®в®ал©
Ўг¤Ґв в ЄЁ¬:
l := 0; t := 0;
{Ёў аЁ в: t = зЁб«® аҐиҐЁ©
Ґа ўҐбвў k*k + y*y < n c y < l }
while k*k + l*l < n do begin
| l := l + 1;
| t := t + 1;
end;
{k*k + l*l >= n, Ї®н⮬г t = зЁб«®
ўбҐе аҐиҐЁ© Ґа ўҐбвў k*k + y*y < n}
1.1.29. ’ ¦Ґ § ¤ з , ® Є®«ЁзҐбвў® ®ЇҐа жЁ© ¤®«¦® Ўлвм
Ї®ап¤Є (n ў б⥯ҐЁ 1/2). (‚ ЇаҐ¤л¤г饬 аҐиҐЁЁ, Є Є ¬®¦®
Ї®¤бзЁв вм, Ї®ап¤Є n ®ЇҐа жЁ©.)
ђҐиҐЁҐ. Ќ б ЁвҐаҐбгов в®зЄЁ аҐиҐвЄЁ (б 楫묨 Є®®а¤Ё в -
* ¬Ё) ў ЇҐаў®¬ Єў ¤а вҐ, Ї®Ї ¤ ойЁҐ ўгвам ЄагЈ
* * * а ¤Ёгб (n ў б⥯ҐЁ 1/2). €вҐаҐбго饥 б
* * * * ¬®¦Ґбвў® ( §®ўҐ¬ ҐЈ® X) б®бв®Ёв Ё§ ®ЎкҐ¤ЁҐ-
* * * * Ёп ўҐавЁЄ «мле бв®«Ўж®ў гЎлў о饩 ўлб®вл.
* * * * * €¤Ґп аҐиҐЁп б®бв®Ёв ў ⮬, зв®Ўл "¤ўЁЈ вмбп
ў¤®«м ҐЈ® Ја Ёжл", бЇгбЄ пбм Ї® ўҐа奬㠥Ј® Єа о, Є Є Ї®
«ҐбвЁжҐ. Љ®®а¤Ё вл ¤ўЁ¦г饩бп в®зЄЁ ®Ў®§ зЁ¬ <k,l>. ‚ўҐ¤Ґ¬
ҐйҐ ®¤г ЇҐаҐ¬Ґго s Ё Ўг¤Ґ¬ Ї®¤¤Ґа¦Ёў вм ЁбвЁ®бвм в Є®Ј® гб-
«®ўЁп:
<k,l> 室Ёвбп ба §г ¤ k-л¬ бв®«Ўж®¬;
s - зЁб«® в®зҐЄ ў ЇаҐ¤л¤гйЁе бв®«Ўж е.
”®а¬ «м®:
l - ¬ЁЁ¬ «м®Ґ б।Ё вҐе l >= 0, ¤«п Є®в®але <k,l> Ґ ЇаЁ ¤-
«Ґ¦Ёв X;
s - зЁб«® Ї а вга «мле x, y, ¤«п Є®в®але x < k Ё <x,y> ЇаЁ-
¤«Ґ¦Ёв X.
ЋЎ®§ зЁ¬ нвЁ гб«®ўЁп зҐаҐ§ (€).
k := 0; l := 0;
while "<0,l> ЇаЁ ¤«Ґ¦Ёв X" do begin
| l := l + 1;
end;
{k = 0, l - ¬ЁЁ¬ «м®Ґ б।Ё вҐе l >= 0,
¤«п Є®в®але <k,l> Ґ ЇаЁ ¤«Ґ¦Ёв X }
s := 0;
{Ёў аЁ в: €}
while not (l = 0) do begin
| s := s + l;
| {s - зЁб«® в®зҐЄ ў бв®«Ўж е ¤® k-Ј® ўЄ«озЁвҐ«м®}
| k := k + 1;
| {в®зЄ <k,l> «Ґ¦Ёв ўҐ X, ®, ў®§¬®¦®, ҐҐ ¤® б¤ўЁгвм
| ўЁ§, зв®Ўл ў®ббв ®ўЁвм € }
| while (l <> 0) and ("<k, l-1> Ґ ЇаЁ ¤«Ґ¦Ёв X") do begin
| | l := l - 1;
| end;
end;
{€, l = 0, Ї®н⮬г k-л© бв®«ЎҐж Ё ўбҐ б«Ґ¤гойЁҐ Їгбвл,
s а ў® ЁбЄ®¬®¬г зЁб«г}
ЋжҐЄ зЁб« ¤Ґ©бвўЁ© ®зҐўЁ¤ : б з « ¬л ¤ўЁ¦Ґ¬бп ўўҐае Ґ Ў®-
«ҐҐ 祬 (n ў б⥯ҐЁ 1/2) и Ј®ў, § ⥬ ўЁ§ Ё ўЇа ў® - ў
Є ¦¤го бв®а®г Ґ Ў®«ҐҐ 祬 (n ў б⥯ҐЁ 1/2) и Ј®ў.
1.1.30. „ л вга «млҐ зЁб« n Ё k, n > 1. Ќ ЇҐз в вм k
¤ҐбпвЁзле § Є®ў зЁб« 1/n. (ЏаЁ «ЁзЁЁ ¤ўге ¤ҐбпвЁзле а §«®-
¦ҐЁ© ўлЎЁа Ґвбп в® Ё§ Ёе, Є®в®а®Ґ Ґ ᮤҐа¦Ёв ¤ҐўпвЄЁ ў ЇҐаЁ-
®¤Ґ.) Џа®Ја ¬¬ ¤®«¦ ЁбЇ®«м§®ў вм в®«мЄ® жҐ«лҐ ЇҐаҐ¬ҐлҐ.
ђҐиҐЁҐ. ‘¤ўЁгў ў ¤ҐбпвЁз®© § ЇЁбЁ зЁб« 1/n § Їпвго k
¬Ґбв ўЇа ў®, Ї®«гзЁ¬ зЁб«® (10 ў б⥯ҐЁ k)/n. Ќ ¬ ¤® ЇҐз -
в вм ҐЈ® 楫го з бвм, в. Ґ. а §¤Ґ«Ёвм (10 ў б⥯ҐЁ k) n -
楫®. ‘в ¤ авл© бЇ®б®Ў вॡгҐв ЁбЇ®«м§®ў Ёп Ў®«миЁе Ї® ўҐ«Ё-
зЁҐ зЁбҐ«, Є®в®алҐ ¬®Јгв ўл©вЁ § Ја Ёжл ¤Ё Ї §® ЇаҐ¤бв ўЁ-
¬ле зЁбҐ«. Џ®н⮬㠬л ᤥ« Ґ¬ Ё зҐ (б«Ґ¤гп ®Ўл箬㠬Ґв®¤г "¤Ґ-
«ҐЁп гЈ®«Є®¬") Ё Ўг¤Ґ¬ еа Ёвм "®бв в®Є" r:
l := 0; r := 1;
{Ёў.: ЇҐз в ® l а §а冷ў 1/n, ®бв «®бм ЇҐз в вм
k - l а §а冷ў ¤а®ЎЁ r/n}
while l <> k do begin
| write ( (10 * r) div n);
| r := (10 * r) mod n;
| l := l + 1;
end;
1.1.31. „ ® вга «м®Ґ зЁб«® n > 1. ЋЇаҐ¤Ґ«Ёвм ¤«Ёг ЇҐ-
аЁ®¤ ¤ҐбпвЁз®© § ЇЁбЁ ¤а®ЎЁ 1/n.
ђҐиҐЁҐ. ЏҐаЁ®¤ ¤а®ЎЁ а ўҐ ЇҐаЁ®¤г ў Ї®б«Ґ¤®ў ⥫м®бвЁ
®бв вЄ®ў (¤®Є ¦ЁвҐ нв®; ў з бв®бвЁ, ¤® ¤®Є § вм, зв® ® Ґ
¬®¦Ґв Ўлвм ¬ҐмиҐ). Ља®¬Ґ в®Ј®, ў нв®© Ї®б«Ґ¤®ў ⥫м®бвЁ ўбҐ
ЇҐаЁ®¤ЁзҐбЄЁ Ї®ўв®апойЁҐбп ўбҐ з«Ґл а §«Ёзл, ЇаҐ¤ЇҐаЁ®¤ Ё¬Ґ-
Ґв ¤«Ёг Ґ Ў®«ҐҐ n. Џ®н⮬㠤®бв в®з® ©вЁ (n+1)-л© з«Ґ Ї®б-
«Ґ¤®ў ⥫м®бвЁ ®бв вЄ®ў Ё § ⥬ ¬ЁЁ¬ «м®Ґ k, ЇаЁ Є®в®а®¬
(n+1+k)-л© з«Ґ б®ўЇ ¤ Ґв б (n+1)-л¬.
l := 0; r := 1;
{Ёў аЁ в: r/n = १г«мв в ®вЎа блў Ёп l § Є®ў ў 1/n}
while l <> n+1 do begin
| r := (10 * r) mod n;
| l := l + 1;
end;
c := r;
{c = (n+1)-л© з«Ґ Ї®б«Ґ¤®ў ⥫м®бвЁ ®бв вЄ®ў}
r := (10 * r) mod n;
k := 0;
{r = (n+k+1)-л© з«Ґ Ї®б«Ґ¤®ў ⥫м®бвЁ ®бв вЄ®ў}
while r <> c do begin
| r := (10 * r) mod n;
| k := k + 1;
end;
1.1.32 (ќ. „Ґ©Єбва ). ”гЄжЁп f б вга «мл¬Ё аЈг¬Ґв ¬Ё
Ё § 票ﬨ ®ЇаҐ¤Ґ«Ґ в Є: f(0) = 0, f(1) = 1, f (2n) = f(n),
f (2n+1) = f (n) + f (n+1). ‘®бв ўЁвм Їа®Ја ¬¬г ўлзЁб«ҐЁп f (n)
Ї® § ¤ ®¬г n, вॡгойго Ї®ап¤Є log n ®ЇҐа жЁ©.
ђҐиҐЁҐ.
k := n; a := 1; b := 0;
{Ёў аЁ в: 0 <= k, f (n) = a * f(k) + b * f (k+1)}
while k <> 0 do begin
| if k mod 2 = 0 then begin
| | l := k div 2;
| | {k = 2l, f(k) = f(l), f (k+1) = f (2l+1) = f(l) + f(l+1),
| | f (n) = a*f(k) + b*f(k+1) = (a+b)*f(l) + b*f(l+1)}
| | a := a + b; k := l;
| end else begin
| | l := k div 2;
| | {k = 2l + 1, f(k) = f(l) + f(l+1),
| | f(k+1) = f(2l+2) = f(l+1),
| | f(n) = a*f(k) + b*f(k+1) = a*f(l) + (a+b)*f(l+1)}
| | b := a + b; k := l;
| end;
end;
{k = 0, f(n) = a * f(0) + b * f(1) = b, зв® Ё вॡ®ў «®бм}
1.1.33. ’® ¦Ґ, Ґб«Ё f(0) = 13, f(1) = 17, f(2n) =
43 f(n) + 57 f(n+1), f(2n+1) = 91 f(n) + 179 f(n+1) ЇаЁ n>=1.
“Є § ЁҐ. •а Ёвм Є®нддЁжЁҐвл ў ўла ¦ҐЁЁ f(n) зҐаҐ§ ваЁ
б®бҐ¤Ёе зЁб« .
1.1.34. „ л вга «млҐ зЁб« Ё b, ЇаЁзҐ¬ b > 0. Ќ ©вЁ
з б⮥ Ё ®бв в®Є ЇаЁ ¤Ґ«ҐЁЁ b, ®ЇҐаЁагп «Ёим б 楫묨
зЁб« ¬Ё Ё Ґ ЁбЇ®«м§гп ®ЇҐа жЁЁ div Ё mod, § ЁбЄ«о票Ґ¬ ¤Ґ«Ґ-
Ёп 2 зҐвле зЁбҐ«; зЁб«® и Ј®ў Ґ ¤®«¦® ЇаҐў®б室Ёвм
C1*log(a/b) + C2 ¤«п ҐЄ®в®але Є®бв в C1, C2.
ђҐиҐЁҐ.
b1 := b;
while b1 <= a do begin
| b1 := b1 * 2;
end;
{b1 > a, b1 = b * (ҐЄ®в®а п б⥯Ґм 2)}
q:=0; r:=a;
{Ёў аЁ в: q, r - з б⮥ Ё ®бв в®Є ЇаЁ ¤Ґ«ҐЁЁ a b1,
b1 = b * (ҐЄ®в®а п б⥯Ґм 2)}
while b1 <> b do begin
| b1 := b1 div 2 ; q := q * 2;
| { a = b1 * q + r, 0 <= r, r < 2 * b1}
| if r >= b1 then begin
| | r := r - b1;
| | q := q + 1;
| end;
end;
{q, r - з б⮥ Ё ®бв в®Є ЇаЁ ¤Ґ«ҐЁЁ a b}
1.2. Њ ббЁўл.
‚ б«Ґ¤гойЁе § ¤ з е ЇҐаҐ¬ҐлҐ x, y, z ЇаҐ¤Ї®« Ј овбп ®ЇЁ-
б л¬Ё Є Є array [1..n] of integer (n - ҐЄ®в®а®Ґ вга «м®Ґ
зЁб«®, Ў®«м襥 0), Ґб«Ё Ё®Ґ Ґ ®Ј®ў®аҐ® пў®.
1.2.1. ‡ Ї®«Ёвм ¬ ббЁў x г«п¬Ё. (ќв® ®§ з Ґв, з⮠㦮
б®бв ўЁвм да Ј¬Ґв Їа®Ја ¬¬л, Ї®б«Ґ ўлЇ®«ҐЁп Є®в®а®Ј® ўбҐ § -
票п x[1]..x[n] а ўп«Ёбм Ўл г«о, Ґ§ ўЁбЁ¬® ®в з «м®Ј®
§ зҐЁп ЇҐаҐ¬Ґ®© x.)
ђҐиҐЁҐ.
i := 0;
{Ёў аЁ в: ЇҐаўлҐ i § 票© x[1]..x[i] а ўл 0}
while i <> n do begin
| i := i + 1;
| {x[1]..x[i-1] = 0}
| x[i] := 0;
end;
1.2.2. Џ®¤бзЁв вм Є®«ЁзҐбвў® г«Ґ© ў ¬ ббЁўҐ x. (‘®бв ўЁвм
да Ј¬Ґв Їа®Ја ¬¬л, Ґ ¬ҐпойЁ© § 票п x, Ї®б«Ґ ЁбЇ®«ҐЁп Є®-
в®а®Ј® § 票Ґ ҐЄ®в®а®© 楫®© ЇҐаҐ¬Ґ®© k а ўп«®бм Ўл зЁб«г
г«Ґ© б।Ё Є®¬Ї®Ґв ¬ ббЁў x.)
ђҐиҐЁҐ.
...
{Ёў аЁ в: k= зЁб«® г«Ґ© б।Ё x[1]...x[i] }
...
1.2.3. ЌҐ ЁбЇ®«м§гп ®ЇҐа в®а ЇаЁбў Ёў Ёп ¤«п ¬ ббЁў®ў,
б®бв ўЁвм да Ј¬Ґв Їа®Ја ¬¬л, нЄўЁў «Ґвл© ®ЇҐа в®аг x:=y.
ђҐиҐЁҐ.
i := 0;
{Ёў аЁ в: § 票Ґ y Ґ Ё§¬ҐЁ«®бм, x[l] = y[l] ЇаЁ l <= i}
while i <> n do begin
| i := i + 1;
| x[i] := y[i];
end;
1.2.4. Ќ ©вЁ ¬ ЄбЁ¬г¬ Ё§ x[1]..x[n].
ђҐиҐЁҐ.
i := 1; max := x[1];
{Ёў аЁ в: max = ¬ ЄбЁ¬г¬ Ё§ x[1]..x[i]}
while i <> n do begin
| i := i + 1;
| {max = ¬ ЄбЁ¬г¬ Ё§ x[1]..x[i-1]}
| if x[i] > max then begin
| | max := x[i];
| end;
end;
1.2.5. „ ¬ ббЁў x: array [1..n] of integer, ЇаЁзс¬ x[1]
<= x[2] <= ... <= x[n]. Ќ ©вЁ Є®«ЁзҐбвў® а §«Ёзле зЁбҐ« б।Ё
н«Ґ¬Ґв®ў нв®Ј® ¬ ббЁў .
ђҐиҐЁҐ. (1 ў аЁ в)
i := 1; k := 1;
{Ёў аЁ в: k - Є®«ЁзҐбвў® а §«Ёзле зЁбҐ« б।Ё x[1]..x[i]}
while i <> n do begin
| i := i + 1;
| if x[i] <> x[i-1] then begin
| | k := k + 1;
| end;
end;
(2 ў аЁ в) €бЄ®¬®Ґ зЁб«® 1 Ў®«миҐ Є®«ЁзҐбвў вҐе зЁбҐ«
i Ё§ 1..n-1, ¤«п Є®в®але x[i] <> x[i+1].
k := 1;
for i := 1 to n-1 do begin
| if x[i]<> x[i+1] then begin
| | k := k + 1;
| end;
end;
1.2.6. (‘®®ЎйЁ« Ђ.‹.Ѓа㤮.) Џаאַ㣮«м®Ґ Ї®«Ґ m n а §-
ЎЁв® mn Єў ¤а вле Є«Ґв®Є. ЌҐЄ®в®алҐ Є«ҐвЄЁ Ї®Єа иҐл ў зҐа-
л© жўҐв. €§ўҐбв®, зв® ўбҐ зҐалҐ Є«ҐвЄЁ ¬®Јгв Ўлвм а §ЎЁвл
ҐбЄ®«мЄ® ҐЇҐаҐбҐЄ ойЁебп Ё Ґ Ё¬ҐойЁе ®ЎйЁе ўҐаиЁ зҐале Їап-
¬®гЈ®«мЁЄ®ў. ‘зЁв п, з⮠梥⠪«Ґв®Є ¤ л ў ўЁ¤Ґ ¬ ббЁў вЁЇ
array [1..m] of array [1..n] of boolean;
Ї®¤бзЁв вм зЁб«® зҐале Їаאַ㣮«мЁЄ®ў, ® Є®в®але и« аҐзм.
—Ёб«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є m*n.
ђҐиҐЁҐ. —Ёб«® Їаאַ㣮«мЁЄ®ў а ў® зЁб«г Ёе «Ґўле ўҐаеЁе
гЈ«®ў. џў«пҐвбп «Ё Є«ҐвЄ ўҐаеЁ¬ гЈ«®¬, ¬®¦® г§ вм, Ї®б¬®вॢ
ҐҐ 梥в, в Є¦Ґ 梥⠢Ґа奣® Ё «Ґў®Ј® б®бҐ¤Ґ©. (ЌҐ § -
Ўг¤мвҐ, зв® Ёе ¬®¦Ґв Ґ Ўлвм, Ґб«Ё Є«ҐвЄ б Єа о.)
1.2.7. „ ¬ ббЁў x: array [1..n] of integer. Ќ ©вЁ Є®«Ё-
зҐбвў® а §«Ёзле зЁбҐ« б।Ё н«Ґ¬Ґв®ў нв®Ј® ¬ ббЁў . (—Ёб«®
¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є n*n.)
1.2.8. ’ ¦Ґ § ¤ з , Ґб«Ё вॡгҐвбп, зв®Ўл Є®«ЁзҐбвў®
¤Ґ©бвўЁ© Ўл«® Ї®ап¤Є n* log n. (“Є § ЁҐ. ‘¬®ваЁ Ј« ўг ® б®авЁ-
а®ўЄҐ.)
1.2.9. ’ ¦Ґ § ¤ з , Ґб«Ё Ё§ўҐбв®, зв® ўбҐ н«Ґ¬Ґвл ¬ ббЁ-
ў - зЁб« ®в 1 ¤® k Ё зЁб«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є n+k.
1.2.10. „ ¬ ббЁў x [1]..x[n] 楫ле зЁбҐ«. ЌҐ ЁбЇ®«м§гп
¤агЈЁе ¬ ббЁў®ў, ЇҐаҐбв ўЁвм н«Ґ¬Ґвл ¬ ббЁў ў ®Ўа ⮬ Ї®ап¤-
ЄҐ.
ђҐиҐЁҐ. —Ёб« x [i] Ё x [n+1-i] 㦮 Ї®¬Ґпвм ¬Ґбв ¬Ё ¤«п
ўбҐе i, ¤«п Є®в®але i < n + 1 - i, в.Ґ. 2*i < n + 1 <=> 2*i <= n
<=> i <= n div 2:
for i := 1 to n div 2 do begin
| ...®Ў¬Ґпвм x [i] Ё x [n+1-i];
end;
1.2.11. (Ё§ ЄЁЈЁ „.ѓаЁб ) „ ¬ ббЁў 楫ле зЁбҐ«
x[1]..x[m+n], а бб¬ ваЁў Ґ¬л© Є Є ᮥ¤ЁҐЁҐ ¤ўге ҐЈ® ®в१Є®ў:
з « x[1]..x[m] ¤«Ёл m Ё Є®ж x[m+1]..x[m+n] ¤«Ёл n. ЌҐ Ёб-
Ї®«м§гп ¤®Ї®«ЁвҐ«мле ¬ ббЁў®ў, ЇҐаҐбв ўЁвм з «® Ё Є®Ґж.
(—Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є m+n.)
ђҐиҐЁҐ. (1 ў аЁ в). ЏҐаҐўҐаҐ¬ (а бЇ®«®¦Ё¬ ў ®Ўа ⮬ Ї®-
ап¤ЄҐ) ®в¤Ґ«м® з «® Ё Є®Ґж ¬ ббЁў , § ⥬ ЇҐаҐўҐаҐ¬ ўҐбм
¬ ббЁў Є Є Ґ¤Ё®Ґ 楫®Ґ.
(2 ў аЁ в, Ђ.ѓ.ЉгиЁаҐЄ®). ђ бб¬ ваЁў п ¬ ббЁў § ЇЁб л¬
Ї® ЄагЈг, ўЁ¤Ё¬, зв® вॡ㥬®Ґ ¤Ґ©бвўЁҐ - Ї®ў®а®в ЄагЈ . Љ Є Ё§-
ўҐбв®, Ї®ў®а®в Ґбвм Є®¬Ї®§ЁжЁп ¤ўге ®бҐўле бЁ¬¬ҐваЁ©.
(3 ў аЁ в). ђ бᬮваЁ¬ Ў®«ҐҐ ®Ўйго § ¤ зг - ®Ў¬Ґ ¤ўге
гз бвЄ®ў ¬ ббЁў x[p+1]..x[q] Ё x[q+1]..x[s]. ЏаҐ¤Ї®«®¦Ё¬, зв®
¤«Ё «Ґў®Ј® гз бвЄ ( §®ўҐ¬ ҐЈ® A) Ґ Ў®«миҐ ¤«Ёл Їа ў®Ј®
( §®ўҐ¬ ҐЈ® B). ‚뤥«Ё¬ ў B з «® в®© ¦Ґ ¤«Ёл, зв® Ё A, §®-
ўҐ¬ ҐЈ® B1, ®бв в®Є B2. (’ Є зв® B = B1 + B2, Ґб«Ё ®Ў®§ з вм
Ї«оᮬ ЇаЁЇЁблў ЁҐ ¬ ббЁў®ў ¤агЈ Є ¤агЈг.) Ќ ¬ ¤® Ё§ A + B1 +
B2 Ї®«гзЁвм B1 + B2 + A. ЊҐпп ¬Ґбв ¬Ё гз бвЄЁ A Ё B1 - ®Ё Ё¬Ґ-
ов ®¤Ё Є®ўго ¤«Ёг, Ё ᤥ« вм нв® «ҐЈЄ®,- Ї®«гз Ґ¬ B1 + A + B2,
Ё ®бв «®бм Ї®¬Ґпвм ¬Ґбв ¬Ё A Ё B2. ’Ґ¬ б ¬л¬ ¬л ᢥ«Ё ¤Ґ«® Є
ЇҐаҐбв ®ўЄҐ ¤ўге ®ва§Є®ў ¬Ґм襩 ¤«Ёл. €в Є, Ї®«гз Ґ¬ в Єго
беҐ¬г Їа®Ја ¬¬л:
p := 0; q := m; r := m + n;
{Ёў аЁ в: ®бв «®бм ЇҐаҐбв ўЁвм x[p+1]..x[q], x[q+1]..x[s]}
while (p <> q) and (q <> s) do begin
| {®Ў гз бвЄ ҐЇгбвл}
| if (q - p) <= (s - q) then begin
| | ..ЇҐаҐбв ўЁвм x[p+1]..x[q] Ё x[q+1]..x[q+(q-p)]
| | pnew := q; qnew := q + (q - p);
| | p := pnew; q := qnew;
| end else begin
| | ..ЇҐаҐбв ўЁвм x[q-(r-q)+1]..x[q] Ё x[q+1]..x[r]
| | qnew := q - (r - q); rnew := q;
| | q := qnew; r := rnew;
| end;
end;
ЋжҐЄ ўаҐ¬ҐЁ а Ў®вл: ®зҐаҐ¤®¬ и ЈҐ ®бв ўиЁ©бп ¤«п ®Ўа Ў®в-
ЄЁ гз бв®Є бв ®ўЁвбп Є®а®зҐ ¤«Ёг A; зЁб«® ¤Ґ©бвўЁ© ЇаЁ н⮬
в Є¦Ґ Їа®Ї®ажЁ® «м® ¤«ЁҐ A.
1.2.12. Љ®нддЁжЁҐвл ¬®Ј®з«Ґ еа пвбп ў ¬ ббЁўҐ a: array
[0..n] of integer (n - вга «м®Ґ зЁб«®, б⥯Ґм ¬®Ј®з«Ґ ).
‚лзЁб«Ёвм § 票Ґ нв®Ј® ¬®Ј®з«Ґ ў в®зЄҐ x (в. Ґ. a[n]*(x ў
б⥯ҐЁ n)+...+a[1]*x+a[0]).
ђҐиҐЁҐ. (ЋЇЁблў Ґ¬л© «Ј®аЁв¬ §лў Ґвбп б奬®© ѓ®аҐа .)
k := 0; y := a[n];
{Ёў аЁ в: 0 <= k <= n,
y= a[n]*(x ў б⥯ҐЁ k)+...+a[n-1]*(x ў б⥯ҐЁ k-1)+...+
+ a[n-k]*(x ў б⥯ҐЁ 0)}
while k<>n do begin
| k := k + 1;
| y := y * x + a [n - k];
end;
1.2.13. („«п § Є®¬ле б ®б®ў ¬Ё «Ё§ . ‘®®ЎйЁ« Ђ.ѓ.Љги-
ЁаҐЄ®.) „®Ї®«Ёвм «Ј®аЁв¬ ўлзЁб«ҐЁп § зҐЁп ¬®Ј®з«Ґ ў
§ ¤ ®© в®зЄҐ Ї® б奬Ґ ѓ®аҐа ўлзЁб«ҐЁҐ¬ § зҐЁп ҐЈ® Їа®Ё§-
ў®¤®© ў в®© ¦Ґ в®зЄҐ.
ђҐиҐЁҐ. „®Ў ў«ҐЁҐ ®ў®Ј® Є®нддЁжЁҐв ᮮ⢥вбвўгҐв ЇҐаҐ-
室㠮⠬®Ј®з«Ґ P(x) Є ¬®Ј®з«Ґг P(x)*x + c. …Ј® Їа®Ё§ў®¤ п
ў в®зЄҐ x а ў P'(x)*x + P(x). (ќв® аҐиҐЁҐ ®Ў« ¤ Ґв § Ў ўл¬
бў®©бвў®¬: Ґ ¤® § вм § а ҐҐ б⥯Ґм ¬®Ј®з«Ґ . …б«Ё вॡ®-
ў вм ўлЇ®«ҐЁп нв®Ј® гб«®ўЁп, ¤ ҐйҐ Їа®бЁвм ўлзЁб«пвм в®«мЄ®
§ 票Ґ Їа®Ё§ў®¤®©, Ґ гЇ®¬Ё п ® б ¬®¬ ¬®Ј®з«ҐҐ, Ї®«гз Ґвбп
Ґ в Є п г¦ Їа®бв п § ¤ з .)
1.2.14. ‚ ¬ ббЁў е
a:array [0..k] of integer Ё b: array [0..l] of integer
еа пвбп Є®нддЁжЁҐвл ¤ўге ¬®Ј®з«Ґ®ў б⥯ҐҐ© k Ё l. Џ®¬Ґб-
вЁвм ў ¬ ббЁў c: array [0..m] of integer Є®нддЁжЁҐвл Ёе Їа®Ё§-
ўҐ¤ҐЁп. (—Ёб« k, l, m - вга «млҐ, m = k + l; н«Ґ¬Ґв ¬ б-
бЁў б Ё¤ҐЄб®¬ i ᮤҐа¦Ёв Є®нддЁжЁҐв ЇаЁ x ў б⥯ҐЁ i.)
ђҐиҐЁҐ.
for i:=0 to m do begin
| c[i]:=0;
end;
for i:=0 to k do begin
| for j:=0 to l do begin
| | c[i+j] := c[i+j] + a[i]*b[j];
| end;
end;
1.2.15. ЏаҐ¤«®¦Ґл© ўлиҐ «Ј®аЁв¬ ЇҐаҐ¬®¦ҐЁп ¬®Ј®з«Ґ®ў
вॡгҐв Ї®ап¤Є n*n ¤Ґ©бвўЁ© ¤«п ЇҐаҐ¬®¦ҐЁп ¤ўге ¬®Ј®з«Ґ®ў
б⥯ҐЁ n. ЏаЁ¤г¬ вм Ў®«ҐҐ нддҐЄвЁўл© (¤«п Ў®«миЁе n) «Ј®аЁв¬,
Є®в®а®¬г ¤®бв в®з® Ї®ап¤Є (n ў б⥯ҐЁ (log 4)/(log 3))
¤Ґ©бвўЁ©.
“Є § ЁҐ. ЏаҐ¤бв ўЁ¬ ᥡҐ, зв® ¤® ЇҐаҐ¬®¦Ёвм ¤ў ¬®Ј®з-
«Ґ б⥯ҐЁ 2k. €е ¬®¦® ЇаҐ¤бв ўЁвм ў ўЁ¤Ґ
A(x)*x^k + B(x) Ё C(x)*x^k + D(x)
(§¤Ґбм x^k ®Ў®§ з Ґв x ў б⥯ҐЁ k). Џа®Ё§ўҐ¤ҐЁҐ Ёе а ў®
A(x)C(x)*x^{2k} + (A(x)D(x)+B(x)C(x))*x^k + B(x)D(x)
…бвҐбвўҐл© бЇ®б®Ў ўлзЁб«ҐЁп AC, AD+BC, BD вॡгҐв зҐвлаҐе г¬-
®¦ҐЁ© ¬®Ј®з«Ґ®ў б⥯ҐЁ k, ®¤ Є® Ёе Є®«ЁзҐбвў® ¬®¦® б®Єа -
вЁвм ¤® ваҐе б Ї®¬®ймо в Є®© еЁва®бвЁ: ўлзЁб«Ёвм AC, BD Ё
(A+B)(C+D), § ⥬ § ¬ҐвЁвм, зв® AD+BC=(A+B)(C+D)-AC-BD.
1.2.16. „ л ¤ў ў®§а бв ойЁе ¬ ббЁў x: array [1..k] of
integer Ё y: array [1..l] of integer. Ќ ©вЁ Є®«ЁзҐбвў® ®ЎйЁе
н«Ґ¬Ґв®ў ў нвЁе ¬ ббЁў е (в. Ґ. Є®«ЁзҐбвў® вҐе 楫ле t, ¤«п Є®-
в®але t = x[i] = y[j] ¤«п ҐЄ®в®але i Ё j). (—Ёб«® ¤Ґ©бвўЁ© Ї®-
ап¤Є k+l.)
ђҐиҐЁҐ.
k1:=0; l1:=0; n:=0;
{Ёў аЁ в: 0<=k1<=k; 0<=l1<=l; ЁбЄ®¬л© ®вўҐв = n + Є®«ЁзҐбвў®
®ЎйЁе н«Ґ¬Ґв®ў ў x[k1+1]...x[k] Ё y[l1+1]..y[l]}
while (k1 <> k) and (l1 <> l) do begin
| if x[k1+1] < y[l1+1] then begin
| | k1 := k1 + 1;
| end else if x[k1+1] > y[l1+1] then begin
| | l1 := l1 + 1;
| end else begin {x[k1+1] = y[l1+1]}
| | k1 := k1 + 1;
| | l1 := l1 + 1;
| | n := n + 1;
| end;
end;
{k1 = k Ё«Ё l1 = l, Ї®н⮬㠮¤® Ё§ ¬®¦Ґбвў, гЇ®¬пгвле ў
Ёў аЁ вҐ, Їгбв®, n а ў® ЁбЄ®¬®¬г ®вўҐвг}
‡ ¬Ґз ЁҐ. ‚ ваҐв쥩 «мвҐа вЁўҐ ¤®бв в®з® Ўл«® Ўл 㢥«ЁзЁў вм
®¤г Ё§ ЇҐаҐ¬Ґле k1, l1; ўв®а п ¤®Ў ў«Ґ ¤«п бЁ¬¬ҐваЁЁ.
1.2.17. ђҐиЁвм ЇаҐ¤л¤гйго § ¤ зг, Ґб«Ё Ё§ўҐбв® «Ёим, зв®
x[1] <= ... <= x[k] Ё y[1] <= ... <= y[l] (ў®§а бв ЁҐ § ¬ҐҐ®
ҐгЎлў ЁҐ¬).
ђҐиҐЁҐ. “б«®ўЁҐ ў®§а бв Ёп Ўл«® ЁбЇ®«м§®ў ® ў ваҐв쥩
«мвҐа вЁўҐ ўлЎ®а : б¤ўЁгў k1 Ё l1 1, ¬л ⥬ б ¬л¬ г¬Ґми -
«Ё 1 Є®«ЁзҐбвў® ®ЎйЁе н«Ґ¬Ґв®ў ў x[k1+1]...x[k] Ё
x[l1+1]...x[l]. ’ҐЇҐам нв® ЇаЁ¤Ґвбп ¤Ґ« вм б«®¦ҐҐ.
...
end else begin {x[k1+1] = y[l1+1]}
| t := x [k1+1];
| while (k1<k) and (x[k1+1]=t) do begin
| | k1 := k1 + 1;
| end;
| while (l1<l) and (x[l1+1]=t) do begin
| | l1 := l1 + 1;
| end;
end;
‡ ¬Ґз ЁҐ. ќв Їа®Ја ¬¬ Ё¬ҐҐв ¤ҐдҐЄв: ЇаЁ Їа®ўҐаЄҐ гб«®ўЁп
(l1<l) and (x[l1+1]=t)
(Ё«Ё ўв®а®Ј®, «®ЈЁз®Ј®) ЇаЁ «®¦®© ЇҐаў®© бЄ®ЎЄҐ ўв®а п ®Є -
¦Ґвбп ЎҐбб¬лб«Ґ®© (Ё¤ҐЄб ўл©¤Ґв § Ја Ёжл ¬ ббЁў ) Ё ў®§ЁЄ-
Ґв ®иЁЎЄ . ЌҐЄ®в®алҐ ўҐабЁЁ Ї бЄ «п, ўлзЁб«пп (A and B), б з -
« ўлзЁб«пов A Ё ЇаЁ «®¦®¬ A Ґ ўлзЁб«пов B. (’ Є ўҐ¤Ґв ᥡп,
ЇаЁ¬Ґа, бЁб⥬ Turbo Pascal, 5.0 - ® Ґ 3.0.) ’®Ј¤ ®ЇЁб -
п ®иЁЎЄ Ґ ў®§ЁЄҐв.
Ќ® Ґб«Ё ¬л Ґ е®вЁ¬ Ї®« Ј вмбп в Є®Ґ бў®©бвў® ЁбЇ®«м§г-
Ґ¬®© ¬Ё ॠ«Ё§ жЁЁ Ї бЄ «п (Ґ ЇаҐ¤гᬮв८Ґ ҐЈ® ўв®а®¬
Ќ.‚Ёа⮬), в® ¬®¦® Ї®бвгЇЁвм в Є. ‚ўҐ¤Ґ¬ ¤®Ї®«ЁвҐ«мго ЇҐаҐ-
¬Ґго b: boolean Ё ЇЁиҐ¬:
if k1 < k then b := (x[k1+1]=t) else b:=false;
{b = (k1<k) and (x[k1+1] = t}
while b do begin
| k1:=k1+1;
| if k1 < k then b := (x[k1+1]=t) else b:=false;
end;
Њ®¦® в Є¦Ґ ᤥ« вм Ё зҐ:
end else begin {x[k1+1] = y[l1+1]}
| if k1 + 1 = k then begin
| | k1 := k1 + 1;
| | n := n + 1;
| end else if x[k1+1] = x [k1+2] then begin
| | k1 := k1 + 1;
| end else begin
| | k1 := k1 + 1;
| | n := n + 1;
| end;
end;
’ Є Ўг¤Ґв Є®а®зҐ, е®вп ¬ҐҐҐ бЁ¬¬ҐваЁз®.
Ќ Є®Ґж, ¬®¦® 㢥«ЁзЁвм а §¬Ґа ¬ ббЁў ў ҐЈ® ®ЇЁб ЁЁ,
ўЄ«озЁў ў ҐЈ® дЁЄвЁўлҐ н«Ґ¬Ґвл.
1.2.18. „ л ¤ў ҐгЎлў ойЁе ¬ ббЁў x: array [1..k] of
integer Ё y: array [1..l] of integer. Ќ ©вЁ зЁб«® а §«Ёзле н«Ґ-
¬Ґв®ў б।Ё x[1],...,x[k], y[1],...,y[l]. (—Ёб«® ¤Ґ©бвўЁ© Ї®-
ап¤Є k+l.)
1.2.19. „ л ¤ў ¬ ббЁў x[1] <= ... <= x[k] Ё y[1] <= ...
<= y[l]. "‘®Ґ¤ЁЁвм" Ёе ў ¬ ббЁў z[1] <= ... <= z[m] (m = k+l;
Є ¦¤л© н«Ґ¬Ґв ¤®«¦Ґ ўе®¤Ёвм ў ¬ ббЁў z бв®«мЄ® а §, бЄ®«мЄ®
а § ® ўе®¤Ёв ў ®ЎйҐ© б«®¦®бвЁ ў ¬ ббЁўл x Ё y). —Ёб«® ¤Ґ©бвўЁ©
Ї®ап¤Є m.
ђҐиҐЁҐ.
k1 := 0; l1 := 0;
{Ёў аЁ в: ®вўҐв Ї®«гзЁвбп, Ґб«Ё Є z[1]..z[k1+l1] ЇаЁЇЁб вм
бЇа ў ᮥ¤ЁҐЁҐ ¬ ббЁў®ў x[k1+1]..x[k] Ё y[l1+1]..y[l]}
while (k1 <> k) or (l1 <> l) do begin
| if k1 = k then begin
| | {l1 < l}
| | l1 := l1 + 1;
| | z[k1+l1] := y[l1];
| end else if l1 = l then begin
| | {k1 < k}
| | k1 := k1 + 1;
| | z[k1+l1] := x[k1];
| end else if x[k1+1] <= y[l1+1] then begin
| | k1 := k1 + 1;
| | z[k1+l1] := x[k1];
| end else if x[k1+1] >= y[l1+1] then begin
| | l1 := l1 + 1;
| | z[k1+l1] := y[l1];
| end else begin
| | { в Є®Ј® Ґ Ўлў Ґв }
| end;
end;
{k1 = k, l1 = l, ¬ ббЁўл ᮥ¤ЁҐл}
ќв®в Їа®жҐбб ¬®¦® Ї®пбЁвм в Є. Џгбвм г б Ґбвм ¤ўҐ бв®ЇЄЁ
Є ав®зҐЄ, ®вб®авЁа®ў ле Ї® «д ўЁвг. Њл ᮥ¤ЁпҐ¬ Ёе ў ®¤г
бв®ЇЄг, ўлЎЁа п Є ¦¤л© а § вг Ё§ ўҐаеЁе Є ав®зҐЄ ®ЎҐЁе бв®Ї®Є,
Є®в®а п Ё¤Ґв а миҐ ў «д ўЁв®¬ Ї®ап¤ЄҐ.
1.2.20. „ л ¤ў ¬ ббЁў x[1] <= ... <= x[k] Ё y[1] <= ...
<= y[l]. Ќ ©вЁ Ёе "ЇҐаҐбҐзҐЁҐ", в.Ґ. ¬ ббЁў z[1] <= ... <=
z[m], ᮤҐа¦ йЁ© Ёе ®ЎйЁҐ н«Ґ¬Ґвл, ЇаЁзҐ¬ Єа в®бвм Є ¦¤®Ј®
н«Ґ¬Ґв ў ¬ ббЁўҐ z а ўпҐвбп ¬ЁЁ¬г¬г Ё§ ҐЈ® Єа в®б⥩ ў ¬ б-
бЁў е x Ё y. —Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є k+l.
1.2.21. „ л ¤ў ¬ ббЁў x[1]<=...<=x[k] Ё y[1]<=...<=y[l]
Ё зЁб«® q. Ќ ©вЁ б㬬㠢Ё¤ x[i]+y[j], ЁЎ®«ҐҐ Ў«Ё§Єго Є зЁб«г
q. (—Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є k+l, ¤®Ї®«ЁвҐ«м п Ї ¬пвм - дЁЄбЁа®-
ў ®Ґ зЁб«® 楫ле ЇҐаҐ¬Ґле, б ¬Ё ¬ ббЁўл ¬Ґпвм Ґ а §аҐи Ґв-
бп.)
“Є § ЁҐ. Ќ ¤® ©вЁ ¬ЁЁ¬ «м®Ґ а ббв®пЁҐ ¬Ґ¦¤г н«Ґ¬Ґв -
¬Ё x[1]<=...<=x[k] Ё q-y[l]<=..<=q-y[1], зв® Ґва㤮 ᤥ« вм ў
室Ґ Ёе б«ЁпЁп ў ®¤Ё (ў®®Ўа ¦ Ґ¬л©) ¬ ббЁў.
1.2.22. (Ё§ ЄЁЈЁ „.ѓаЁб ) ЌҐЄ®в®а®Ґ зЁб«® ᮤҐа¦Ёвбп ў
Є ¦¤®¬ Ё§ ваҐе 楫®зЁб«Ґле ҐгЎлў ойЁе ¬ ббЁў®ў x[1] <= ... <=
x[p], y[1] <= ... <= y[q], z[1] <= ... <= z[r]. Ќ ©вЁ ®¤® Ё§
в ЄЁе зЁбҐ«. —Ёб«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є p + q + r.
ђҐиҐЁҐ.
p1:=1; q1=1; r1:=1;
{Ёў аЁ в: x[p1]..x[p], y[q1]..y[q], z[r1]..z[r]
ᮤҐа¦ в ®ЎйЁ© н«Ґ¬Ґв }
while not ((x[p1]=y[q1]) and (y[q1]=z[r1])) do begin
| if x[p1]<y[q1] then begin
| | p1:=p1+1;
| end else if y[q1]<z[r1] then begin
| | q1:=q1+1;
| end else if z[r1]<x[p1] then begin
| | r1:=r1+1;
| end else begin
| | { в Є Ґ Ўлў Ґв }
| end;
end;
{x[p1] = y[q1] = z[r1]}
writeln (x[p1]);
1.2.23. ’ ¦Ґ § ¤ з , в®«мЄ® § а ҐҐ Ґ Ё§ўҐбв®, бгйҐбвўг-
Ґв «Ё ®ЎйЁ© н«Ґ¬Ґв ў ваҐе ҐгЎлў ойЁе ¬ ббЁў е Ё вॡгҐвбп нв®
ўлпбЁвм (Ё ©вЁ ®¤Ё Ё§ ®ЎйЁе н«Ґ¬Ґв®ў, Ґб«Ё ®Ё Ґбвм).
1.2.24. ќ«Ґ¬Ґв ¬Ё ¬ ббЁў a[1..n] пў«повбп ҐгЎлў ойЁҐ
¬ ббЁўл [1..m] 楫ле зЁбҐ« (a: array [1..n] of array [1..m] of
integer; a[1][1] <= ... <= a[1][m], ..., a[n][1] <= ... <=
a[n][m]). €§ўҐбв®, зв® бгйҐбвўгҐв зЁб«®, ўе®¤п饥 ў® ўбҐ ¬ ббЁ-
ўл a[i] (бгйҐбвўгҐв в Є®Ґ е, зв® ¤«п ўбпЄ®Ј® i Ё§ [1..n]
©¤свбп j Ё§ [1..m], ¤«п Є®в®а®Ј® a[i][j]=x). Ќ ©вЁ ®¤® Ё§ в -
ЄЁе зЁбҐ« е.
ђҐиҐЁҐ. ‚ўҐ¤Ґ¬ ¬ ббЁў b[1]..b[n], ®в¬Ґз ойЁ© з «® "®бв -
о饩бп з бвЁ" ¬ ббЁў®ў a[1]..a[n].
for k:=1 to n do begin
| b[k]:=1;
end;
eq := true;
for k := 2 to n do begin
| eq := eq and (a[1][b[1]] = a[k][b[k]]);
end;
{Ёў аЁ в: ®бв ўиЁҐбп з бвЁ ЇҐаҐбҐЄ овбп, в.Ґ. бгйҐбвўгҐв
в Є®Ґ е, зв® ¤«п ўбпЄ®Ј® i Ё§ [1..n] ©¤свбп j Ё§ [1..m],
Ґ ¬Ґм襥 b[i], ¤«п Є®в®а®Ј® a[i][j] = е; eq <=> ЇҐаўлҐ
н«Ґ¬Ґвл ®бв ўиЁебп з б⥩ а ўл}
while not eq do begin
| s := 1; k := 1;
| {a[s][b[s]] - ¬ЁЁ¬ «м®Ґ б।Ё a[1][b[1]]..a[k][b[k]]}
| while k <> n do begin
| | k := k + 1;
| | if a[k][b[k]] < a[s][b[s]] then begin
| | | s := k;
| | end;
| end;
| {a[s][b[s]] - ¬ЁЁ¬ «м®Ґ б।Ё a[1][b[1]]..a[n][b[n]]}
| b [s] := b [s] + 1;
| for k := 2 to n do begin
| | eq := eq and (a[1][b[1]] = a[k][b[k]]);
| end;
end;
writeln (a[1][b[1]]);
1.2.25. ЏаЁўҐ¤Ґ®Ґ аҐиҐЁҐ ЇаҐ¤л¤г饩 § ¤ зЁ вॡгҐв Ї®-
ап¤Є m*n*n ¤Ґ©бвўЁ©. ЏаЁ¤г¬ вм бЇ®б®Ў б зЁб«®¬ ¤Ґ©бвўЁ© Ї®ап¤Є
m*n.
“Є § ЁҐ. ЏаЁ¤Ґвбп Ї®¦Ґавў®ў вм бЁ¬¬ҐваЁҐ© Ё ўлЎа вм ®¤г
Ё§ бва®Є § ®б®ўго. „ўЁЈ пбм Ї® ®б®ў®© бва®ЄҐ, Ї®¤¤Ґа¦Ёў Ґ¬
в Є®Ґ б®®в®иҐЁҐ: ў® ўбҐе ®бв «мле бва®Є е ®в¬ҐзҐ ¬ ЄбЁ-
¬ «мл© н«Ґ¬Ґв, Ґ ЇаҐў®б室пйЁ© ⥪г饣® н«Ґ¬Ґв ®б®ў®©
бва®ЄЁ.
1.2.26. („ў®Ёзл© Ї®ЁбЄ) „ Ї®б«Ґ¤®ў ⥫м®бвм x[1] <=
... <= x[n] 楫ле зЁбҐ« Ё зЁб«® a. ‚лпбЁвм, ᮤҐа¦Ёвбп «Ё a ў
нв®© Ї®б«Ґ¤®ў ⥫м®бвЁ, в. Ґ. бгйҐбвўгҐв «Ё i Ё§ 1..n, ¤«п Є®-
в®а®Ј® x[i]=a. (Љ®«ЁзҐбвў® ¤Ґ©бвўЁ© Ї®ап¤Є log n.)
ђҐиҐЁҐ. (ЏаҐ¤Ї®« Ј Ґ¬, зв® n > 0.)
l := 1; r := n+1;
{Ґб«Ё a Ґбвм ў®®ЎйҐ, в® Ґбвм Ё б।Ё x[l]..x[r-1], r > l}
while r - l <> 1 do begin
| m := l + (r-l) div 2 ;
| {l < m < r }
| if x[m] <= a then begin
| | l := m;
| end else begin {x[m] > a}
| | r := m;
| end;
end;
(ЋЎа вЁвҐ ўЁ¬ ЁҐ, зв® Ё ў б«гз Ґ x[m] = a Ёў аЁ в Ґ аги -
Ґвбп.)
Љ ¦¤л© а § r-l 㬥ми Ґвбп ЇаЁ¬Ґа® ў¤ў®Ґ, ®вЄг¤ Ё ўл⥪ -
Ґв вॡ㥬 п ®жҐЄ зЁб« ¤Ґ©бвўЁ©.
‡ ¬Ґз ЁҐ.
l + (r-l) div 2 = (2l + (r-l)) div 2 = (r+l) div 2.
1.2.27. (€§ ЄЁЈЁ „.ѓаЁб ) „ ¬ ббЁў x: array [1..n] of
array [1..m] of integer, гЇ®а冷зҐл© Ї® "бва®Є ¬" Ё Ї®
"бв®«Ўж ¬":
x[i][j] <= x[i+1][j],
x[i][j] <= x[i][j+1]
Ё зЁб«® a. ’ॡгҐвбп ўлпбЁвм, ўбваҐз Ґвбп «Ё a б।Ё x[i][j].
ђҐиҐЁҐ. ЏаҐ¤бв ў«пп ᥡҐ ¬ ббЁў a Є Є ¬ ваЁжг (Їаאַ-
гЈ®«мЁЄ, § Ї®«Ґл© зЁб« ¬Ё), ¬л ўлЎҐаҐ¬ Їаאַ㣮«мЁЄ, ў Є®-
в®а®¬ в®«мЄ® Ё ¬®¦Ґв ᮤҐа¦ вмбп a, Ё Ўг¤Ґ¬ ҐЈ® бг¦ вм. Џаאַ-
гЈ®«мЁЄ нв®в Ўг¤Ґв ᮤҐа¦ вм x[i][j] ЇаЁ 1<=i<=l Ё k<=j<=m.
1 k m
-----------------------------------
1| |***********|
| |***********|
| |***********|
l| |***********|
|---------------------------------|
| |
n| |
-----------------------------------
(¤®ЇгбЄ овбп ЇгбвлҐ Їаאַ㣮«мЁЄЁ ЇаЁ l = 0 Ё k = m+1).
l:=n; k:=1;
{l>=0, k<=m+1, Ґб«Ё a Ґбвм, в® ў ®ЇЁб ®¬ Їаאַ㣮«мЁЄҐ}
while (l > 0) and (k < m+1) and (x[l][k] <> a) do begin
| if x[l][k] < a then begin
| | k := k + 1; {«Ґўл© бв®«ЎҐж Ґ ᮤҐа¦Ёв a, г¤ «пҐ¬ ҐЈ®}
| end else begin {x[l][k] > a}
| | l := l - 1; {Ё¦пп бва®Є Ґ ᮤҐа¦Ёв a, г¤ «пҐ¬ ҐҐ}
| end;
end;
{x[l][k] = a Ё«Ё Їаאַ㣮«мЁЄ Їгбв }
answer:= (l > 0) and (k < m+1) ;
‡ ¬Ґз ЁҐ. ‡¤Ґбм в ¦Ґ ®иЁЎЄ : x[l][k] ¬®¦Ґв ®Є § вмбп Ґ-
®ЇаҐ¤Ґ«Ґл¬. (…с ЁбЇа ў«ҐЁҐ ЇаҐ¤®бв ў«пҐвбп зЁв ⥫о.)
1.2.28. (Њ®бЄ®ўбЄ п ®«Ё¬ЇЁ ¤ Ї® Їа®Ја ¬¬Ёа®ў Ёо) „ Ґ-
гЎлў ойЁ© ¬ ббЁў Ї®«®¦ЁвҐ«мле 楫ле зЁбҐ« a[1] <= a[2] <=...<=
a[n]. Ќ ©вЁ Ё¬Ґм襥 楫®Ґ Ї®«®¦ЁвҐ«м®Ґ зЁб«®, Ґ ЇаҐ¤бв ўЁ-
¬®Ґ ў ўЁ¤Ґ бг¬¬л ҐбЄ®«мЄЁе н«Ґ¬Ґв®ў нв®Ј® ¬ ббЁў (Є ¦¤л© н«Ґ-
¬Ґв ¬ ббЁў ¬®¦Ґв Ўлвм ЁбЇ®«м§®ў Ґ Ў®«ҐҐ ®¤®Ј® а § ). —Ёб«®
¤Ґ©бвўЁ© Ї®ап¤Є n.
ђҐиҐЁҐ. Џгбвм Ё§ўҐбв®, зв® зЁб« , ЇаҐ¤бв ўЁ¬лҐ ў ўЁ¤Ґ
б㬬л н«Ґ¬Ґв®ў a[1],...,a[k], § Ї®«пов ®в१®Є ®в 1 ¤® ҐЄ®в®-
а®Ј® N. …б«Ё a[k+1] > N+1, в® N+1 Ё Ўг¤Ґв ¬ЁЁ¬ «мл¬ зЁб«®¬, Ґ
ЇаҐ¤бв ўЁ¬л¬ ў ўЁ¤Ґ б㬬л н«Ґ¬Ґв®ў ¬ ббЁў a[1]..a[n]. …б«Ё ¦Ґ
a[k+1] <= N+1, в® зЁб« , ЇаҐ¤бв ўЁ¬лҐ ў ўЁ¤Ґ б㬬л н«Ґ¬Ґв®ў
a[1]..a[k+1], § Ї®«пов ®в१®Є ®в 1 ¤® N+a[k+1].
k := 0; N := 0;
{Ёў аЁ в: зЁб« , ЇаҐ¤бв ўЁ¬лҐ ў ўЁ¤Ґ б㬬л н«Ґ¬Ґв®ў ¬ ббЁў
a[1]..a[k], § Ї®«пов ®в१®Є 1..N}
while (k <> n) and (a[k+1] <= N+1) do begin
| N := N + a[k+1];
| k := k + 1;
end;
{(k = n) Ё«Ё (a[k+1] > N+1); ў ®Ў®Ёе б«гз пе ®вўҐв N+1}
writeln (N+1);
(‘®ў в®в ¦Ґ ¤ҐдҐЄв: ў гб«®ўЁЁ жЁЄ« ЇаЁ «®¦®¬ ЇҐаў®¬ гб«®ўЁЁ
ўв®а®Ґ Ґ ®ЇаҐ¤Ґ«Ґ®.)
1.2.29. („«п § Є®¬ле б ®б®ў ¬Ё «ЈҐЎал) ‚ 楫®зЁб«Ґ®¬
¬ ббЁўҐ a[1]..a[n] еа Ёвбп ЇҐаҐбв ®ўЄ зЁбҐ« 1..n (Є ¦¤®Ґ Ё§
зЁбҐ« ўбваҐз Ґвбп Ї® ®¤®¬г а §г).
( ) ЋЇаҐ¤Ґ«Ёвм зҐв®бвм ЇҐаҐбв ®ўЄЁ. (€ ў ( ), Ё ў (Ў) Є®-
«ЁзҐбвў® ¤Ґ©бвўЁ© Ї®ап¤Є n.)
(Ў) ЌҐ ЁбЇ®«м§гп ¤агЈЁе ¬ ббЁў®ў, § ¬ҐЁвм ЇҐаҐбв ®ўЄг
®Ўа вго (Ґб«Ё ¤® а Ў®вл Їа®Ја ¬¬л a[i]=j, в® Ї®б«Ґ ¤®«¦® Ўлвм
a[j]=i).
“Є § ЁҐ. ( ) —Ґв®бвм ЇҐаҐбв ®ўЄЁ ®ЇаҐ¤Ґ«пҐвбп Є®«Ё-
зҐбвў®¬ жЁЄ«®ў. —в®Ўл ®в«Ёз вм 㦥 Їа®©¤ҐлҐ жЁЄ«л, г Ёе н«Ґ-
¬Ґв®ў ¬®¦®, ЇаЁ¬Ґа, ¬Ґпвм § Є. (Ў) ЋЎа 饨Ґ Їа®Ё§ў®¤Ё¬ Ї®
жЁЄ« ¬.
1.2.30. „ ¬ ббЁў a[1..n] Ё зЁб«® b. ЏҐаҐбв ўЁвм зЁб« ў
¬ ббЁўҐ в ЄЁ¬ ®Ўа §®¬, зв®Ўл б«Ґў ®в ҐЄ®в®а®© Ја Ёжл бв®п«Ё
зЁб« , ¬ҐмиЁҐ Ё«Ё а ўлҐ b, бЇа ў ®в Ја Ёжл - Ў®«миЁҐ Ё«Ё
а ўлҐ b.
ђҐиҐЁҐ.
l:=0; r:=n;
{Ёў аЁ в: a[1]..a[l]<=b; a[r+1]..a[n]>=b}
while l <> r do begin
| if a[l+1] <= b then begin
| | l:=l+1;
| end else if a[r] >=b then begin
| | r:=r-1;
| end else begin {a[l+1]>b; a[r]<b}
| | Ї®¬Ґпвм a[l+1] Ё a[r]
| | l:=l+1; r:+r-1;
| end;
end;
1.2.31. ’ ¦Ґ § ¤ з , ® вॡгҐвбп, зв®Ўл б з « и«Ё н«Ґ-
¬Ґвл, ¬ҐмиЁҐ b, § ⥬ а ўлҐ b, «Ёим § ⥬ Ў®«миЁҐ b.
ђҐиҐЁҐ. ’ҐЇҐам Ї®вॡговбп ваЁ Ја Ёжл: ¤® ЇҐаў®© Ўг¤гв
Ё¤вЁ н«Ґ¬Ґвл, ¬ҐмиЁҐ b, ®в ЇҐаў®© ¤® ўв®а®© - а ўлҐ b, § ⥬
ҐЁ§ўҐбв® Є ЄЁҐ ¤® ваҐв쥩, Ї®б«Ґ ваҐв쥩 - Ў®«миЁҐ b. (Ѓ®«ҐҐ
бЁ¬¬ҐваЁз®Ґ аҐиҐЁҐ ЁбЇ®«м§®ў «® Ўл зҐвлॠЈа Ёжл, ® ўап¤ «Ё
ЁЈа бв®Ёв ᢥз.) ‚ Є зҐб⢥ ®зҐаҐ¤®Ј® а бб¬ ваЁў Ґ¬®Ј® н«Ґ¬Ґ-
в ЎҐаҐ¬ н«Ґ¬Ґв бЇа ў ®в б।Ґ© Ја Ёжл.
l:=0; m:=0; r:=n;
{Ёў аЁ в: a[1..l]<b; a[l+1..m]=b; a[r+1]..a[n]>b}
while m <> r do begin
| if a[m+1]=b then begin
| | m:=m+1;
| end else if a[m+1]>b then begin
| | ®Ў¬Ґпвм a[m+1] Ё a[r]
| | r:=r-1;
| end else begin {a[m+1]<b}
| | ®Ў¬Ґпвм a[m+1] Ё a[l+1]
| | l:=l+1; m:=m+1;
end;
1.2.32. (ў ਠ⠯।л¤г饩 § ¤ зЁ, §ў л© ў ЄЁЈҐ
„Ґ©Єбвал § ¤ 祩 ® Ј®«« ¤бЄ®¬ д« ЈҐ) ‚ ¬ ббЁўҐ бв®пв зЁб« 0, 1
Ё 2. ЏҐаҐбв ўЁвм Ёе ў Ї®ап¤ЄҐ ў®§а бв Ёп, Ґб«Ё Ґ¤Ёб⢥®©
а §аҐиҐ®© ®ЇҐа жЁҐ© (Ї®¬Ё¬® з⥨п) ¤ ¬ ббЁў®¬ пў«пҐвбп ЇҐ-
аҐбв ®ўЄ ¤ўге н«Ґ¬Ґв®ў.
1.2.33. „ ¬ ббЁў a[1]..a[n] Ё зЁб«® m<=n. „«п Є ¦¤®©
ЈагЇЇл Ё§ m бв®пйЁе а冷¬ з«Ґ®ў (в ЄЁе ЈагЇЇ, ®зҐўЁ¤®, n-m+1)
ўлзЁб«Ёвм ҐҐ б㬬г. ЋЎйҐҐ зЁб«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є n.
ђҐиҐЁҐ. ЏҐаҐе®¤п ®в ЈагЇЇл Є б®бҐ¤Ґ©, ¬л ¤®Ў ў«пҐ¬ ®¤Ё
з«Ґ, ¤агЈ®© ўлзЁв Ґ¬.
1.2.34. „ Єў ¤а в п в Ў«Ёж a[1..n][1..n] Ё зЁб«® m<=n.
„«п Є ¦¤®Ј® Єў ¤а в а §¬Ґа m m ў нв®© в Ў«ЁжҐ ўлзЁб«Ёвм
б㬬г бв®пйЁе ў Ґ¬ зЁбҐ«. ЋЎйҐҐ зЁб«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®-
ап¤Є n*n.
ђҐиҐЁҐ. ‘ з « ¤«п Є ¦¤®Ј® Ј®аЁ§®в «м®Ј® Їаאַ㣮«мЁЄ
а §¬Ґа®¬ n 1 ўлзЁб«пҐ¬ б㬬г бв®пйЁе ў Ґ¬ зЁбҐ«. (ЏаЁ б¤ўЁЈҐ
в Є®Ј® Їаאַ㣮«мЁЄ Ї® Ј®аЁ§®в «Ё 1 㦮 ¤®Ў ўЁвм ®¤®
зЁб«® Ё ®¤® ўлзҐбвм.) ‡ ⥬, ЁбЇ®«м§гп нвЁ б㬬л, ўлзЁб«пҐ¬
бг¬¬л ў Єў ¤а в е. (ЏаЁ б¤ўЁЈҐ Єў ¤а в Ї® ўҐавЁЄ «Ё ¤®Ў ў«пҐвбп
Ї®«®бЄ , ¤агЈ п Ї®«®бЄ гЎ ў«пҐвбп.)
1.3. €¤гЄвЁўлҐ дгЄжЁЁ (Ї® Ђ.ѓ.ЉгиЁаҐЄ®).
Џгбвм M - ҐЄ®в®а®Ґ ¬®¦Ґбвў®. ”гЄжЁп f, аЈг¬Ґв ¬Ё Є®в®-
а®© пў«повбп Ї®б«Ґ¤®ў ⥫м®бвЁ н«Ґ¬Ґв®ў ¬®¦Ґбвў M, § зҐ-
Ёп¬Ё - н«Ґ¬Ґвл ҐЄ®в®а®Ј® ¬®¦Ґбвў N, §лў Ґвбп Ё¤гЄвЁў®©,
Ґб«Ё ҐҐ § 票Ґ Ї®б«Ґ¤®ў ⥫м®бвЁ x[1]..x[n] ¬®¦® ў®ббв -
®ўЁвм Ї® ҐҐ § зҐЁо Ї®б«Ґ¤®ў ⥫м®бвЁ x[1]..x[n-1] Ё Ї®
x[n], в. Ґ. Ґб«Ё бгйҐбвўгҐв дгЄжЁп F Ё§ N*M (¬®¦Ґбвў® Ї а
<n,m>, Ј¤Ґ n - н«Ґ¬Ґв ¬®¦Ґбвў N, m - н«Ґ¬Ґв ¬®¦Ґбвў M) ў
N, ¤«п Є®в®а®©
f(<x[1],...,x[n]>) = F (f (<x[1],...,x[n-1]>), x[n]).
‘奬 «Ј®аЁв¬ ўлзЁб«ҐЁп Ё¤гЄвЁў®© дгЄжЁЁ:
k := 0; f := f0;
{Ёў аЁ в: f - § 票Ґ дгЄжЁЁ <x[1],...,x[k]>}
while k<> n do begin
| k := k + 1;
| f := F (f, x[k]);
end;
‡¤Ґбм f0 - § 票Ґ дгЄжЁЁ Їгбв®© Ї®б«Ґ¤®ў ⥫м®бвЁ
(Ї®б«Ґ¤®ў ⥫м®бвЁ ¤«Ёл 0). …б«Ё дгЄжЁп f ®ЇаҐ¤Ґ«Ґ в®«мЄ®
ҐЇгбвле Ї®б«Ґ¤®ў ⥫м®бвпе, в® ЇҐаў п бва®Є § ¬ҐпҐвбп
"k := 1; f := f (<x[1]>);".
€¤гЄвЁўлҐ а биЁаҐЁп.
…б«Ё дгЄжЁп f Ґ пў«пҐвбп Ё¤гЄвЁў®©, Ї®«Ґ§® ЁбЄ вм ҐҐ
Ё¤гЄвЁў®Ґ а биЁаҐЁҐ - в Єго Ё¤гЄвЁўго дгЄжЁо g, § 票п
Є®в®а®© ®ЇаҐ¤Ґ«пов § 票п f (нв® § зЁв, зв® бгйҐбвўгҐв в Є п
дгЄжЁп t, зв® f (<x[1]...x[n]>) = t (g (<x[1]...x[n]>)) ЇаЁ
ўбҐе <x[1]...x[n]>). Њ®¦® ¤®Є § вм, зв® б।Ё ўбҐе Ё¤гЄвЁўле
а биЁаҐЁ© бгйҐбвўгҐв ¬ЁЁ¬ «м®Ґ а биЁаҐЁҐ F (¬ЁЁ¬ «м®бвм
®§ з Ґв, зв® ¤«п «оЎ®Ј® Ё¤гЄвЁў®Ј® а биЁаҐЁп g § 票п F
®ЇаҐ¤Ґ«повбп § 票ﬨ g).
1.3.1. “Є § вм Ё¤гЄвЁўлҐ а биЁаҐЁп ¤«п б«Ґ¤гойЁе
дгЄжЁ©:
) б।ҐҐ аЁд¬ҐвЁзҐбЄ®Ґ Ї®б«Ґ¤®ў ⥫м®бвЁ ўҐйҐб⢥ле
зЁбҐ«;
Ў) зЁб«® н«Ґ¬Ґв®ў Ї®б«Ґ¤®ў ⥫м®б⨠楫ле зЁбҐ«, а ўле ҐҐ
¬ ЄбЁ¬ «м®¬г н«Ґ¬Ґвг;
ў) ўв®а®© Ї® ўҐ«ЁзЁҐ н«Ґ¬Ґв Ї®б«Ґ¤®ў ⥫м®б⨠楫ле зЁбҐ«
(в®в, Є®в®ал© Ўг¤Ґв ўв®ал¬, Ґб«Ё ЇҐаҐбв ўЁвм з«Ґл ў ҐгЎлў о饬
Ї®ап¤ЄҐ);
Ј) ¬ ЄбЁ¬ «м®Ґ зЁб«® Ё¤гйЁе Ї®¤ап¤ ®¤Ё Є®ўле н«Ґ¬Ґв®ў;
¤) ¬ ЄбЁ¬ «м п ¤«Ё ¬®®в®®Ј® (ҐгЎлў о饣® Ё«Ё Ґў®§-
а бв о饣®) гз бвЄ Ё§ Ё¤гйЁе Ї®¤ап¤ н«Ґ¬Ґв®ў ў Ї®б«Ґ¤®ў -
⥫м®б⨠楫ле зЁбҐ«;
Ґ) зЁб«® ЈагЇЇ Ё§ Ґ¤ЁЁж, а §¤Ґ«Ґле г«п¬Ё (ў Ї®б«Ґ¤®ў -
⥫м®бвЁ г«Ґ© Ё Ґ¤ЁЁж).
ђҐиҐЁҐ.
) <б㬬 ўбҐе з«Ґ®ў Ї®б«Ґ¤®ў ⥫м®бвЁ; ¤«Ё >;
Ў) <зЁб«® н«Ґ¬Ґв®ў, а ўле ¬ ЄбЁ¬ «м®¬г; § 票Ґ ¬ ЄбЁ-
¬ «м®Ј®>;
ў) < ЁЎ®«миЁ© н«Ґ¬Ґв Ї®б«Ґ¤®ў ⥫м®бвЁ; ўв®а®© Ї® ўҐ«ЁзЁҐ
н«Ґ¬Ґв>;
Ј) <¬ ЄбЁ¬ «м®Ґ зЁб«® Ё¤гйЁе Ї®¤ап¤ ®¤Ё Є®ўле н«Ґ¬Ґв®ў; зЁб-
«® Ё¤гйЁе Ї®¤ап¤ ®¤Ё Є®ўле н«Ґ¬Ґв®ў ў Є®жҐ Ї®б«Ґ¤®ў -
⥫м®бвЁ; Ї®б«Ґ¤Ё© н«Ґ¬Ґв Ї®б«Ґ¤®ў ⥫м®бвЁ>;
¤) <¬ ЄбЁ¬ «м п ¤«Ё ¬®®в®®Ј® гз бвЄ ; ¬ ЄбЁ¬ «м п ¤«Ё
ҐгЎлў о饣® гз бвЄ ў Є®жҐ Ї®б«Ґ¤®ў ⥫м®бвЁ; ¬ ЄбЁ-
¬ «м п ¤«Ё Ґў®§а бв о饣® гз бвЄ ў Є®жҐ Ї®б«Ґ¤®ў -
⥫м®бвЁ; Ї®б«Ґ¤Ё© з«Ґ Ї®б«Ґ¤®ў ⥫м®бвЁ>;
Ґ) <зЁб«® ЈагЇЇ Ё§ Ґ¤ЁЁж, Ї®б«Ґ¤Ё© з«Ґ>.
1.3.2. (‘®®ЎйЁ« „.‚ аб®®д쥢.) „ л ¤ўҐ Ї®б«Ґ¤®ў ⥫м®бвЁ
x[1]..x[n] Ё y[1]..y[k] 楫ле зЁбҐ«. ‚лпбЁвм, пў«пҐвбп «Ё ўв®-
а п Ї®б«Ґ¤®ў ⥫м®бвм Ї®¤Ї®б«Ґ¤®ў ⥫м®бвмо ЇҐаў®©, в. Ґ. ¬®¦-
® «Ё Ё§ ЇҐаў®© ўлзҐаЄгвм ҐЄ®в®алҐ з«Ґл в Є, зв®Ўл ®бв « бм
ўв®а п. —Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є n+k.
ђҐиҐЁҐ. (1 ў аЁ в) Ѓг¤Ґ¬ бў®¤Ёвм § ¤ зг Є § ¤ зҐ
¬Ґм襣® а §¬Ґа .
n1:=n;
k1:=k;
{Ёў аЁ в: ЁбЄ®¬л© ®вўҐв <=> ў®§¬®¦®бвм Ё§ x[1]..x[n1] Ї®-
«гзЁвм y[1]..y[k1] }
while (n1 > 0) and (k1 > 0) do begin
| if x[n1] = y[k1] then begin
| | n1 := n1 - 1;
| | k1 := k1 - 1;
| end else begin
| | n1 := n1 - 1;
| end;
end;
{n1 = 0 Ё«Ё k1 = 0; Ґб«Ё k1 = 0, в® ®вўҐв - ¤ , Ґб«Ё k1 <> 0
(Ё n1 = 0), в® ®вўҐв - Ґв}
answer := (k1 = 0);
Њл ЁбЇ®«м§®ў «Ё в®, зв® Ґб«Ё x[n1] = y[k1] Ё y[1]..y[k1] -
Ї®¤Ї®б«Ґ¤®ў ⥫м®бвм x[1]..x[n1], в® y[1]..y[k1-1] - Ї®¤Ї®б«Ґ-
¤®ў ⥫м®бвм x[1]..x[n1-1].
(2 ў аЁ в) ”гЄжЁп x[1]..x[n1] |-> (¬ ЄбЁ¬ «м®Ґ k1, ¤«п
Є®в®а®Ј® y[1]..y[k1] Ґбвм Ї®¤Ї®б«Ґ¤®ў ⥫м®бвм x[1]..x[n1]) Ё-
¤гЄвЁў .
1.3.3. „ л ¤ўҐ Ї®б«Ґ¤®ў ⥫м®бвЁ x[1]..x[n] Ё y[1]..y[k]
楫ле зЁбҐ«. Ќ ©вЁ ¬ ЄбЁ¬ «мго ¤«Ёг Ї®б«Ґ¤®ў ⥫м®бвЁ, пў«п-
о饩бп Ї®¤Ї®б«Ґ¤®ў ⥫м®бвмо ®ЎҐЁе Ї®б«Ґ¤®ў ⥫м®б⥩. Љ®«Ё-
зҐбвў® ®ЇҐа жЁ© Ї®ап¤Є n*k.
ђҐиҐЁҐ (б®®ЎйҐ® Њ.Ќ.‚ ©жў ©Ј®¬, Ђ.Њ.„Ё¬Ґв¬ ®¬). ЋЎ®§-
зЁ¬ зҐаҐ§ f(n1,k1) ¬ ЄбЁ¬ «мго ¤«Ёг ®ЎйҐ© Ї®¤Ї®б«Ґ¤®ў -
⥫м®бвЁ Ї®б«Ґ¤®ў ⥫м®б⥩ x[1]..x[n1] Ё y[1]..y[k1]. ’®Ј¤
x[n1] <> y[k1] => f(n1,k1) = max (f(n1,k1-1), f(n1-1,k1));
x[n1] = y[k1] => f(n1,k1) = max (f(n1,k1-1), f(n1-1,k1),
f(n1-1,k1-1)+1 );
(Џ®бЄ®«мЄг f(n1-1,k1-1)+1 >= f(n1,k1-1), f(n1-1,k1), ў® ўв®а®¬
б«гз Ґ ¬ ЄбЁ¬г¬ ваҐе зЁбҐ« ¬®¦® § ¬ҐЁвм ваҐвмҐ Ё§ Ёе.)
Џ®н⮬㠬®¦® § Ї®«пвм в Ў«Ёжг § 票© дгЄжЁЁ f, Ё¬Ґойго
а §¬Ґа n*k. Њ®¦® ®Ў®©вЁбм Ё Ї ¬пвмо Ї®ап¤Є k (Ё«Ё n), Ґб«Ё Ё-
¤гЄвЁў® (Ї® n1) ўлЇЁб вм <f(n1,0), ..., f(n1,k)> (Є Є дгЄжЁп
®в n1 нв®в Ў®а Ё¤гЄвЁўҐ).
1.3.4 (Ё§ ЄЁЈЁ „.ѓаЁб ) „ Ї®б«Ґ¤®ў ⥫м®бвм 楫ле зЁ-
ᥫ x[1],..., x[n]. Ќ ©вЁ ¬ ЄбЁ¬ «мго ¤«Ёг ҐҐ ў®§а бв о饩
Ї®¤Ї®б«Ґ¤®ў ⥫м®бвЁ (зЁб«® ¤Ґ©бвўЁ© Ї®ап¤Є n*log(n)).
ђҐиҐЁҐ. €бЄ®¬ п дгЄжЁп Ґ Ё¤гЄвЁў , ® Ё¬ҐҐв б«Ґ¤го饥
Ё¤гЄвЁў®Ґ а биЁаҐЁҐ: ў ҐЈ® ўе®¤Ёв Ї®¬Ё¬® ¬ ЄбЁ¬ «м®© ¤«Ёл
ў®§а бв о饩 Ї®¤Ї®б«Ґ¤®ў ⥫м®бвЁ (®Ў®§ зЁ¬ ҐҐ k) в Є¦Ґ Ё зЁб-
« u[1],...,u[k], Ј¤Ґ u[i] = (¬ЁЁ¬ «мл© Ё§ Ї®б«Ґ¤Ёе з«Ґ®ў
ў®§а бв ойЁе Ї®¤Ї®б«Ґ¤®ў ⥫м®б⥩ ¤«Ёл i). ЋзҐўЁ¤®, u[1] <=
... <= u[k]. ЏаЁ ¤®Ў ў«ҐЁЁ ®ў®Ј® з«Ґ x § 票п u Ё k Є®а-
४вЁаговбп.
n1 := 1; k := 1; u[1] := x[1];
{Ёў аЁ в: k Ё u ᮮ⢥вбвўгов ¤ ®¬г ўлиҐ ®ЇЁб Ёо}
while n1 <> n do begin
| n1 := n1 + 1;
| ...
| {i - ЁЎ®«м襥 Ё§ вҐе зЁбҐ« ®в१Є 1..k, ¤«п Є®в®-
| але u[i] < x[n1]; Ґб«Ё в ЄЁе Ґв, в® i=0 }
| if i = k then begin
| | k := k + 1;
| | u[k+1] := x[n1];
| end else begin {i < k, u[i] < x[n1] <= u[i+1] }
| | u[i+1] := x[n1];
| end;
end;
”а Ј¬Ґв ... ЁбЇ®«м§гҐв Ё¤Ґо ¤ў®Ёз®Ј® Ї®ЁбЄ ; ў Ёў аЁ -
⥠гб«®ў® Ї®« Ј Ґ¬ u[0] а ўл¬ ¬Ёгб ЎҐбЄ®Ґз®бвЁ, u[k+1]
- Ї«об ЎҐбЄ®Ґз®бвЁ; и 楫м: u[i] < x[n1] <= u[i+1].
i:=0; j:=k+1;
{u[i] < x[n1] <= u[j], j > i}
while (j - i) <> 1 do begin
| s := i + (j-i) div 2; {i < s < j}
| if u[s] >= x[n1] then begin
| | j := s;
| end else begin {u[s] < x[n1]}
| | i := s;
| end;
end;
{u[i] < x[n1] <= u[j], j-i = 1}
‡ ¬Ґз ЁҐ. Ѓ®«ҐҐ Їа®б⮥ (® Ґ ¬ЁЁ¬ «м®Ґ) Ё¤гЄвЁў®Ґ
а биЁаҐЁҐ Ї®«гзЁвбп, Ґб«Ё ¤«п Є ¦¤®Ј® i еа Ёвм ¬ ЄбЁ¬ «мго
¤«Ёг ў®§а бв о饩 Ї®¤Ї®б«Ґ¤®ў ⥫м®бвЁ, ®Є зЁў о饩бп
x[i]. ќв® а биЁаҐЁҐ ЇаЁў®¤Ёв Є «Ј®аЁв¬г б зЁб«®¬ ¤Ґ©бвўЁ© Ї®-
ап¤Є n*n.
1.3.5. Љ ЄЁҐ Ё§¬ҐҐЁп 㦮 ўҐбвЁ ў аҐиҐЁҐ ЇаҐ¤л¤г饩
§ ¤ зЁ, Ґб«Ё ¤® ЁбЄ вм ¬ ЄбЁ¬ «мго ҐгЎлў ойго Ї®б«Ґ¤®ў -
⥫м®бвм?
1.1. ‡ ¤ зЁ ЎҐ§ ¬ ббЁў®ў
1.1.1. „ л ¤ўҐ жҐ«лҐ ЇҐаҐ¬ҐлҐ a, b. ‘®бв ўЁвм да Ј¬Ґв
Їа®Ја ¬¬л, Ї®б«Ґ ЁбЇ®«ҐЁп Є®в®а®Ј® § зҐЁп ЇҐаҐ¬Ґле Ї®¬Ґп-
«Ёбм Ўл ¬Ґбв ¬Ё (®ў®Ґ § 票Ґ a а ў® бв ஬㠧 票о b Ё -
®Ў®а®в).
ђҐиҐЁҐ. ‚ўҐ¤Ґ¬ ¤®Ї®«ЁвҐ«мго 楫го ЇҐаҐ¬Ґго t.
t := a;
a := b;
b := t;
Џ®ЇлвЄ ®Ў®©вЁбм ЎҐ§ ¤®Ї®«ЁвҐ«м®© ЇҐаҐ¬Ґ®©, ЇЁб ў
a := b;
b := a;
Ґ ЇаЁў®¤Ёв Є 楫Ё (ЎҐ§ў®§ўа в® гва зЁў Ґвбп з «м®Ґ § 票Ґ
ЇҐаҐ¬Ґ®© a).
1.1.2. ђҐиЁвм ЇаҐ¤л¤гйго § ¤ зг, Ґ ЁбЇ®«м§гп ¤®Ї®«Ё-
⥫мле ЇҐаҐ¬Ґле (Ё ЇаҐ¤Ї®« Ј п, зв® § 票ﬨ 楫ле ЇҐаҐ¬Ґ-
ле ¬®Јгв Ўлвм Їа®Ё§ў®«млҐ жҐ«лҐ зЁб« ).
ђҐиҐЁҐ. (Ќ з «млҐ § 票п a Ё b ®Ў®§ зЁ¬ a0, b0.)
a := a + b; {a = a0 + b0, b = b0}
b := a - b; {a = a0 + b0, b = a0}
a := a - b; {a = b0, b = a0}
1.1.3. „ ® 楫®Ґ зЁб«® Ё вга «м®Ґ (楫®Ґ Ґ®ваЁж -
⥫쮥) зЁб«® n. ‚лзЁб«Ёвм ў б⥯ҐЁ n. „агЈЁ¬Ё б«®ў ¬Ё, Ґ-
®Ўе®¤Ё¬® б®бв ўЁвм Їа®Ја ¬¬г, ЇаЁ ЁбЇ®«ҐЁЁ Є®в®а®© § 票п
ЇҐаҐ¬Ґле Ё n Ґ ¬Ґповбп, § 票Ґ ҐЄ®в®а®© ¤агЈ®© ЇҐаҐ-
¬Ґ®© ( ЇаЁ¬Ґа, b) бв ®ўЁвбп а ўл¬ ў б⥯ҐЁ n. (ЏаЁ н⮬
а §аҐи Ґвбп ЁбЇ®«м§®ў вм Ё ¤агЈЁҐ ЇҐаҐ¬ҐлҐ.)
ђҐиҐЁҐ. ‚ўҐ¤Ґ¬ 楫го ЇҐаҐ¬Ґго k, Є®в®а п ¬ҐпҐвбп ®в 0
¤® n, ЇаЁзҐ¬ Ї®¤¤Ґа¦Ёў Ґвбп в Є®Ґ бў®©бвў®: b = (a ў б⥯ҐЁ
k).
k := 0; b := 1;
{b = a ў б⥯ҐЁ k}
while k <> n do begin
| k := k + 1;
| b := b * a;
end;
„агЈ®Ґ аҐиҐЁҐ в®© ¦Ґ § ¤ зЁ:
k := n; b := 1;
{a ў б⥯ҐЁ n = b * (a ў б⥯ҐЁ k)}
while k <> 0 do begin
| k := k - 1;
| b := b * a;
end;
1.1.4. ђҐиЁвм ЇаҐ¤л¤гйго § ¤ зг, Ґб«Ё вॡгҐвбп, зв®Ўл зЁб-
«® ¤Ґ©бвўЁ© (ўлЇ®«пҐ¬ле ®ЇҐа в®а®ў ЇаЁбў Ёў Ёп) Ўл«® Ї®ап¤Є
log n (в® Ґбвм Ґ ЇаҐў®б室Ё«® Ўл C*log n ¤«п ҐЄ®в®а®© Є®бв -
вл C; log n - нв® б⥯Ґм, ў Є®в®аго 㦮 ў®§ўҐбвЁ 2, зв®Ўл Ї®-
«гзЁвм n).
ђҐиҐЁҐ. ‚ҐбҐ¬ ҐЄ®в®алҐ Ё§¬ҐҐЁп ў® ўв®а®Ґ Ё§ ЇаҐ¤«®¦Ґ-
ле аҐиҐЁ© ЇаҐ¤л¤г饩 § ¤ зЁ:
k := n; b := 1; c:=a;
{a ў б⥯ҐЁ n = b * (c ў б⥯ҐЁ k)}
while k <> 0 do begin
| if k mod 2 = 0 then begin
| | k:= k div 2;
| | c:= c*c;
| end else begin
| | k := k - 1;
| | b := b * c;
| end;
end;
Љ ¦¤л© ўв®а®© а § (Ґ ०Ґ) Ўг¤Ґв ўлЇ®«пвмбп ЇҐаўл© ў аЁ в
®ЇҐа в®а ўлЎ®а (Ґб«Ё k ҐзҐв®, в® Ї®б«Ґ ўлзЁв Ёп Ґ¤ЁЁжл
бв ®ўЁвбп зҐвл¬), в Є зв® § ¤ў жЁЄ« ўҐ«ЁзЁ k 㬥ми Ґвбп
Ї® Єа ©Ґ© ¬ҐаҐ ў¤ў®Ґ.
1.1.5. „ л вга «млҐ зЁб« , b. ‚лзЁб«Ёвм Їа®Ё§ўҐ¤ҐЁҐ
*b, ЁбЇ®«м§гп ў Їа®Ја ¬¬Ґ «Ёим ®ЇҐа жЁЁ +, -, =, <>.
ђҐиҐЁҐ.
var a, b, c, k : integer;
k := 0; c := 0;
{Ёў аЁ в: c = a * k}
while k <> b do begin
| k := k + 1;
| c := c + a;
end;
{c = a * k Ё k = b, б«Ґ¤®ў ⥫м®, c = a * b}
1.1.6. „ л вга «млҐ зЁб« Ё b. ‚лзЁб«Ёвм Ёе б㬬г
+b. €бЇ®«м§®ў вм ®ЇҐа в®ал ЇаЁбў Ёў Ёп «Ёим ўЁ¤
<ЇҐаҐ¬Ґ п1> := <ЇҐаҐ¬Ґ п2>,
<ЇҐаҐ¬Ґ п> := <зЁб«®>,
<ЇҐаҐ¬Ґ п1> := <ЇҐаҐ¬Ґ п2> + 1.
ђҐиҐЁҐ.
...
{Ёў аЁ в: c = a + k}
...
1.1.7. „ ® вга «м®Ґ (楫®Ґ Ґ®ваЁж ⥫쮥) зЁб«® Ё
楫®Ґ Ї®«®¦ЁвҐ«м®Ґ зЁб«® d. ‚лзЁб«Ёвм з б⮥ q Ё ®бв в®Є r ЇаЁ
¤Ґ«ҐЁЁ d, Ґ ЁбЇ®«м§гп ®ЇҐа жЁ© div Ё mod.
ђҐиҐЁҐ. ‘®Ј« б® ®ЇаҐ¤Ґ«ҐЁо, a = q * d + r, 0 <= r < d.
{a >= 0; d > 0}
r := a; q := 0;
{Ёў аЁ в: a = q * d + r, 0 <= r}
while not (r < d) do begin
| {r >= d}
| r := r - d; {r >= 0}
| q := q + 1;
end;
1.1.8. „ ® вга «м®Ґ n, ўлзЁб«Ёвм n!
(0!=1, n! = n * (n-1)!).
1.1.9. Џ®б«Ґ¤®ў ⥫м®бвм ”ЁЎ® ззЁ ®ЇаҐ¤Ґ«пҐвбп в Є:
a(0)= 1, a(1) = 1, a(k) = a(k-1) + a(k-2) ЇаЁ k >= 2. „ ® n,
ўлзЁб«Ёвм a(n).
1.1.10. ’ ¦Ґ § ¤ з , Ґб«Ё вॡгҐвбп, зв®Ўл зЁб«® ®ЇҐа жЁ©
Ўл«® Їа®Ї®ажЁ® «м® log n. (ЏҐаҐ¬ҐлҐ ¤®«¦л Ўлвм 楫®зЁб«Ґ-
л¬Ё.)
“Є § ЁҐ. Џ а б®бҐ¤Ёе зЁбҐ« ”ЁЎ® ззЁ Ї®«гз Ґвбп Ё§ ЇаҐ-
¤л¤г饩 㬮¦ҐЁҐ¬ ¬ ваЁжг
|1 1|
|1 0|
в Є зв® § ¤ з бў®¤Ёвбп Є ў®§ўҐ¤ҐЁо ¬ ваЁжл ў б⥯Ґм n. ќв®
¬®¦® ᤥ« вм § C*log n ¤Ґ©бвўЁ© ⥬ ¦Ґ бЇ®б®Ў®¬, зв® Ё ¤«п зЁ-
ᥫ.
1.1.11. „ ® вга «м®Ґ n, ўлзЁб«Ёвм 1/0!+1/1!+...+1/n!.
1.1.12. ’® ¦Ґ, Ґб«Ё вॡгҐвбп, зв®Ўл Є®«ЁзҐбвў® ®ЇҐа жЁ©
(ўлЇ®«Ґле Є®¬ ¤ ЇаЁбў Ёў Ёп) Ўл«® Ўл Ґ Ў®«ҐҐ C*n ¤«п Ґ-
Є®в®а®© Є®бв вл ‘.
ђҐиҐЁҐ. €ў аЁ в: sum = 1/1! +...+ 1/k!, last = 1/k!
(ў ¦® Ґ ўлзЁб«пвм § ®ў® Є ¦¤л© а § k!).
1.1.13. „ л ¤ў вга «мле зЁб« a Ё b, Ґ а ўлҐ г«о
®¤®ўаҐ¬Ґ®. ‚лзЁб«Ёвм ЌЋ„ (a,b) - ЁЎ®«миЁ© ®ЎйЁ© ¤Ґ«ЁвҐ«м
Ё b.
ђҐиҐЁҐ (1 ў аЁ в).
if a > b then begin
| k := a;
end else begin
| k := b;
end;
{k = max (a,b)}
{Ёў аЁ в: ЁЄ Є®Ґ зЁб«®, Ў®«м襥 k, Ґ пў«пҐвбп ®Ў-
йЁ¬ ¤Ґ«ЁвҐ«Ґ¬}
while not (((a mod k)=0) and ((b mod k)=0)) do begin
| k := k - 1;
end;
{k - ®ЎйЁ© ¤Ґ«ЁвҐ«м, Ў®«миЁҐ - Ґв}
(2 ў аЁ в - «Ј®аЁв¬ …ўЄ«Ё¤ ). Ѓг¤Ґ¬ бзЁв вм , зв® ЌЋ„
(0,0) = 0. ’®Ј¤ ЌЋ„ (a,b) = ЌЋ„ (a-b,b) = ЌЋ„ (a,b-a); ЌЋ„
(a,0) = ЌЋ„ (0,a) = a ¤«п ўбҐе a,b>=0.
m := a; n := b;
{Ёў аЁ в: ЌЋ„ (a,b) = ЌЋ„ (m,n); m,n >= 0 }
while not ((m=0) or (n=0)) do begin
| if m >= n then begin
| | m := m - n;
| end else begin
| | n := n - m;
| end;
end;
if m = 0 then begin
| k := n;
end else begin
| k := m;
end;
1.1.14. Ќ ЇЁб вм ¬®¤ЁдЁжЁа®ў л© ў аЁ в «Ј®аЁв¬ …ўЄ«Ё-
¤ , ЁбЇ®«м§гойЁ© б®®в®иҐЁп ЌЋ„ (a, b) = ЌЋ„ (a mod b, b) ЇаЁ
a >= b, ЌЋ„ (a, b) = ЌЋ„ (a, b mod a) ЇаЁ b >= a.
1.1.15. „ л вга «млҐ Ё b, Ґ а ўлҐ 0 ®¤®ўаҐ¬Ґ®.
Ќ ©вЁ d = ЌЋ„ (a,b) Ё в ЄЁҐ жҐ«лҐ x Ё y, зв® d = a*x + b*y.
ђҐиҐЁҐ. „®Ў ўЁ¬ ў «Ј®аЁв¬ …ўЄ«Ё¤ ЇҐаҐ¬ҐлҐ p, q, r, s
Ё ўЇЁиҐ¬ ў Ёў аЁ в гб«®ўЁп m = p*a + q*b; n = r*a + s*b.
m:=a; n:=b; p := 1; q := 0; r := 0; s := 1;
{Ёў аЁ в: ЌЋ„ (a,b) = ЌЋ„ (m,n); m,n >= 0
m = p*a + q*b; n = r*a + s*b.}
while not ((m=0) or (n=0)) do begin
| if m >= n then begin
| | m := m - n; p := p - r; q := q - s;
| end else begin
| | n := n - m; r := r - p; s := s - q;
| end;
end;
if m = 0 then begin
| k :=n; x := r; y := s;
end else begin
| k := m; x := p; y := q;
end;
1.1.16. ђҐиЁвм ЇаҐ¤л¤гйго § ¤ зг, ЁбЇ®«м§гп ў «Ј®аЁв¬Ґ
…ўЄ«Ё¤ ¤Ґ«ҐЁҐ б ®бв вЄ®¬.
1.1.17. (ќ.„Ґ©Єбва ). „®Ў ўЁ¬ ў «Ј®аЁв¬ …ўЄ«Ё¤ ¤®Ї®«Ё-
⥫млҐ ЇҐаҐ¬ҐлҐ u, v, z:
m := a; n := b; u := b; v := a;
{Ёў аЁ в: ЌЋ„ (a,b) = ЌЋ„ (m,n); m,n >= 0 }
while not ((m=0) or (n=0)) do begin
| if m >= n then begin
| | m := m - n; v := v + u;
| end else begin
| | n := n - m; u := u + v;
| end;
end;
if m = 0 then begin
| z:= v;
end else begin {n=0}
| z:= u;
end;
„®Є § вм, зв® Ї®б«Ґ ЁбЇ®«ҐЁп «Ј®аЁв¬ z а ў® г¤ў®Ґ®¬г -
Ё¬Ґм襬㠮ЎйҐ¬г Єа ⮬г зЁбҐ« a, b: z = 2 * ЌЋЉ (a,b).
ђҐиҐЁҐ. ‡ ¬ҐвЁ¬, зв® ўҐ«ЁзЁ m*u + n*v Ґ ¬ҐпҐвбп ў 室Ґ
ўлЇ®«ҐЁп «Ј®аЁв¬ . Ћбв Ґвбп ў®бЇ®«м§®ў вмбп ⥬, зв® ў з «Ґ
® а ў 2*a*b Ё зв® ЌЋ„ (a, b) * ЌЋЉ (a, b) = a*b.
1.1.18. Ќ ЇЁб вм ў аЁ в «Ј®аЁв¬ …ўЄ«Ё¤ , ЁбЇ®«м§гойЁ©
б®®в®иҐЁп
ЌЋ„(2*a, 2*b) = 2*ЌЋ„(a,b)
ЌЋ„(2*a, b) = ЌЋ„(a,b) ЇаЁ ҐзҐв®¬ b,
Ґ ўЄ«оз ойЁ© ¤Ґ«ҐЁп б ®бв вЄ®¬, ЁбЇ®«м§гойЁ© «Ёим ¤Ґ«ҐЁҐ
2 Ё Їа®ўҐаЄг зҐв®бвЁ. (—Ёб«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є log k
¤«п Ёб室ле ¤ ле, Ґ ЇаҐў®б室пйЁе k.)
ђҐиҐЁҐ.
m:= a; n:=b; d:=1;
{ЌЋ„(a,b) = d * ЌЋ„(m,n)}
while not ((m=0) or (n=0)) do begin
| if (m mod 2 = 0) and (n mod 2 = 0) then begin
| | d:= d*2; m:= m div 2; n:= n div 2;
| end else if (m mod 2 = 0) and (n mod 2 = 1) then begin
| | m:= m div 2;
| end else if (m mod 2 = 1) and (n mod 2 = 0) then begin
| | n:= n div 2;
| end else if (m mod 2=1) and (n mod 2=1) and (m>=n)then begin
| | m:= m-n;
| end else if (m mod 2=1) and (n mod 2=1) and (m<=n)then begin
| | n:= n-m;
| end;
end;
{m=0 => ®вўҐв=d*n; n=0 => ®вўҐв=d*m}
ЋжҐЄ зЁб« ¤Ґ©бвўЁ©: Є ¦¤®Ґ ўв®а®Ґ ¤Ґ©бвўЁҐ ¤Ґ«Ёв е®вп Ўл ®¤®
Ё§ зЁбҐ« m Ё n Ї®Ї®« ¬.
1.1.19. „®Ї®«Ёвм «Ј®аЁв¬ ЇаҐ¤л¤г饩 § ¤ зЁ Ї®ЁбЄ®¬ x Ё y,
¤«п Є®в®але ax+by=ЌЋ„(a,b).
ђҐиҐЁҐ. (€¤Ґп б®®ЎйҐ „.‡ў®ЄЁл¬) ЏаҐ¦¤Ґ ўбҐЈ® § ¬ҐвЁ¬,
зв® ®¤®ўаҐ¬Ґ®Ґ ¤Ґ«ҐЁҐ a Ё b Ї®Ї®« ¬ Ґ ¬ҐпҐв ЁбЄ®¬ле x Ё y.
Џ®н⮬㠬®¦® бзЁв вм, зв® б б ¬®Ј® з « ®¤® Ё§ зЁбҐ« a Ё b
ҐзҐв®. (ќв® бў®©бвў® Ўг¤Ґв б®еа пвмбп Ё ¤ «ҐҐ.)
’ҐЇҐам Ї®Їлв Ґ¬бп, Є Є Ё а миҐ, еа Ёвм в ЄЁҐ зЁб«
p,q,r,s, зв®
m = ap + bq
n = ar + bs
Џа®Ў«Ґ¬ ў ⮬, зв® ЇаЁ ¤Ґ«ҐЁЁ, бЄ ¦Ґ¬, m 2 ¤® а §¤Ґ«Ёвм p
Ё q 2, Ё ®Ё ЇҐаҐбв гв Ўлвм 楫묨 ( бв гв ¤ў®Ёз®-а жЁ-
® «мл¬Ё). „ў®Ёз®-а жЁ® «м®Ґ зЁб«® ҐбвҐб⢥® еа Ёвм ў ўЁ-
¤Ґ Ї ал (зЁб«ЁвҐ«м, Ї®Є § ⥫м б⥯ҐЁ ¤ў®©ЄЁ ў § ¬Ґ ⥫Ґ). ‚
Ёв®ЈҐ ¬л Ї®«гз Ґ¬ d ў ўЁ¤Ґ Є®¬ЎЁ жЁЁ a Ё b б ¤ў®Ёз®-а жЁ-
® «мл¬Ё Є®нддЁжЁҐв ¬Ё. €л¬Ё б«®ў ¬Ё, ¬л Ё¬ҐҐ¬
(2 ў б⥯ҐЁ i)* d = ax + by
¤«п ҐЄ®в®але 楫ле x,y Ё вга «м®Ј® i. —в® ¤Ґ« вм, Ґб«Ё i >
1? …б«Ё x Ё y зсвл, в® 2 ¬®¦® б®Єа вЁвм. …б«Ё нв® Ґ в Є,
Ї®«®¦ҐЁҐ ¬®¦® ЁбЇа ўЁвм ЇаҐ®Ўа §®ў ЁҐ¬
x := x + b
y := y - a
(®® Ґ ¬ҐпҐв ax+by). “ЎҐ¤Ё¬бп ў н⮬. Ќ Ї®¬Ё¬, зв® ¬л бзЁв -
Ґ¬, зв® ®¤® Ё§ зЁбҐ« a Ё b Ґзсв®. Џгбвм нв® Ўг¤Ґв a. …б«Ё ЇаЁ
н⮬ y зсв®, в® Ё x ¤®«¦® Ўлвм зсвл¬ (Ё зҐ ax+by Ўг¤Ґв Ґ-
зсвл¬). Ђ ЇаЁ Ґзс⮬ y ўлзЁв ЁҐ Ё§ ҐЈ® сзҐв®Ј® a ¤Ґ« Ґв y
зсвл¬.
1.1.20. ‘®бв ўЁвм Їа®Ја ¬¬г, ЇҐз в ойго Єў ¤а вл ўбҐе вг-
а «мле зЁбҐ« ®в 0 ¤® § ¤ ®Ј® вга «м®Ј® n.
ђҐиҐЁҐ.
k:=0;
writeln (k*k);
{Ёў аЁ в: k<=n, ЇҐз в л ўбҐ
Єў ¤а вл ¤® k ўЄ«озЁвҐ«м®}
while not (k=n) do begin
| k:=k+1;
| writeln (k*k);
end;
1.1.21. ’ ¦Ґ § ¤ з , ® а §аҐи Ґвбп ЁбЇ®«м§®ў вм Ё§ аЁд-
¬ҐвЁзҐбЄЁе ®ЇҐа жЁ© «Ёим б«®¦ҐЁҐ Ё ўлзЁв ЁҐ, ЇаЁзҐ¬ ®ЎйҐҐ зЁб-
«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є n.
ђҐиҐЁҐ. ‚ўҐ¤Ґ¬ ЇҐаҐ¬Ґго k_square (square - Єў ¤а в),
бўп§ го б k б®®в®иҐЁҐ¬ k_square = k*k:
k := 0; k_square := 0;
writeln (k_square);
while not (k = n) do begin
| k := k + 1;
| {k_square = (k-1) * (k-1) = k*k - 2*k + 1}
| k_square := k_square + k + k - 1;
| writeln (k_square);
end;
1.1.22. ‘®бв ўЁвм Їа®Ја ¬¬г, ЇҐз в ойго а §«®¦ҐЁҐ Їа®б-
влҐ ¬®¦ЁвҐ«Ё § ¤ ®Ј® вга «м®Ј® зЁб« n > 0 (¤агЈЁ¬Ё б«®ў -
¬Ё, вॡгҐвбп ЇҐз в вм в®«мЄ® Їа®бвлҐ зЁб« Ё Їа®Ё§ўҐ¤ҐЁҐ ЇҐ-
з в ле зЁбҐ« ¤®«¦® Ўлвм а ў® n; Ґб«Ё n = 1, ЇҐз в вм ЁзҐЈ®
Ґ ¤®).
ђҐиҐЁҐ (1 ў аЁ в).
k := n;
{Ёў аЁ в: Їа®Ё§ўҐ¤ҐЁҐ ЇҐз в ле зЁбҐ« Ё k а ў®
n, ЇҐз в л в®«мЄ® Їа®бвлҐ зЁб« }
while not (k = 1) do begin
| l := 2;
| {Ёў аЁ в: k Ґ Ё¬ҐҐв ¤Ґ«ЁвҐ«Ґ© ў ЁвҐаў «Ґ (1,l)}
| while k mod l <> 0 do begin
| | l := l + 1;
| end;
| {l - Ё¬ҐмиЁ© ¤Ґ«ЁвҐ«м k, Ў®«миЁ© 1, б«Ґ¤®ў ⥫м®,
| Їа®бв®©}
| writeln (l);
| k:=k div l;
end;
(2 ў аЁ в).
k := n; l := 2;
{Їа®Ё§ўҐ¤ҐЁҐ k Ё ЇҐз в ле зЁбҐ« а ў® n; ЇҐз -
в лҐ зЁб« Їа®бвл; k Ґ Ё¬ҐҐв ¤Ґ«ЁвҐ«Ґ©, ¬ҐмиЁе l}
while not (k = 1) do begin
| if k mod l = 0 then begin
| | {k ¤Ґ«Ёвбп l Ё Ґ Ё¬ҐҐв ¤Ґ«ЁвҐ«Ґ©,
| | ¬ҐмиЁе l, § зЁв, l Їа®бв®}
| | k := k div l;
| | writeln (l);
| end else begin
| | { k Ґ ¤Ґ«Ёвбп l }
| | l := l + 1;
| end;
end;
1.1.23. ‘®бв ўЁвм Їа®Ја ¬¬г аҐиҐЁп ЇаҐ¤л¤г饩 § ¤ зЁ, Ёб-
Ї®«м§гойго в®в д Єв, зв® б®бв ў®Ґ зЁб«® Ё¬ҐҐв ¤Ґ«ЁвҐ«м, Ґ
ЇаҐў®б室пйЁ© Єў ¤а в®Ј® Є®ап Ё§ нв®Ј® зЁб« .
ђҐиҐЁҐ. ‚® ўв®а®¬ ў ਠ⥠аҐиҐЁп ў¬Ґбв® l:=l+1 ¬®¦® -
ЇЁб вм
if l*l > k then begin
| l:=k;
end else begin
| l:=l+1;
end;
1.1.24. Џа®ўҐаЁвм, пў«пҐвбп «Ё § ¤ ®Ґ вга «м®Ґ зЁб«®
n > 1 Їа®бвл¬.
1.1.25. („«п § Є®¬ле б ®б®ў ¬Ё «ЈҐЎал). „ ® 楫®Ґ Ј -
гбб®ў® зЁб«® n + mi (ЇаЁ ¤«Ґ¦ 饥 Z[i]). (a) Џа®ўҐаЁвм, пў«п-
Ґвбп «Ё ®® Їа®бвл¬ (ў Z[i]); (Ў) ЇҐз в вм ҐЈ® а §«®¦ҐЁҐ
Їа®бвлҐ (ў Z[i]) ¬®¦ЁвҐ«Ё.
1.1.26. ђ §аҐиЁ¬ ЁбЇ®«м§®ў вм Є®¬ ¤л write (i) «Ёим ЇаЁ i
= 0,1,2,...,9. ‘®бв ўЁвм Їа®Ја ¬¬г, ЇҐз в ойго ¤ҐбпвЁзго § -
ЇЁбм § ¤ ®Ј® вга «м®Ј® зЁб« n > 0. (‘«гз © n = 0 пўЁ«бп
Ўл ҐЄ®в®ал¬ ЁбЄ«о票Ґ¬, в Є Є Є ®Ўлз® г«Ё ў з «Ґ зЁб« Ґ
ЇҐз в овбп, ¤«п n = 0 - ЇҐз в овбп.)
ђҐиҐЁҐ.
base:=1;
{base - б⥯Ґм 10, Ґ ЇаҐў®б室пй п n}
while 10 * base <= n do begin
| base:= base * 10;
end;
{base - ¬ ЄбЁ¬ «м п б⥯Ґм 10, Ґ ЇаҐў®б室пй п n}
k:=n;
{Ёў аЁ в: ®бв «®бм ЇҐз в вм k б ⥬ ¦Ґ зЁб«®¬
§ Є®ў, зв® ў base; base = 100..00}
while base <> 1 do begin
| write(k div base);
| k:= k mod base;
| base:= base div 10;
end;
{base=1; ®бв «®бм ЇҐз в вм ®¤®§ 箥 зЁб«® k}
write(k);
(’ЁЇЁз п ®иЁЎЄ ЇаЁ аҐиҐЁЁ нв®© § ¤ зЁ: ҐЇа ўЁ«м® ®Ўа Ў вл-
ў овбп зЁб« б г«п¬Ё Ї®бҐаҐ¤ЁҐ. ЏаЁўҐ¤Ґл© Ёў аЁ в ¤®ЇгбЄ -
Ґв б«гз ©, Є®Ј¤ k < base; ў н⮬ б«гз Ґ ЇҐз в ЁҐ k зЁ Ґвбп
б® бв аиЁе г«Ґ©.)
1.1.27. ’® ¦Ґ б ¬®Ґ, ® ¤® ЇҐз в вм ¤ҐбпвЁзго § ЇЁбм ў
®Ўа ⮬ Ї®ап¤ЄҐ. („«п n = 173 ¤® ЇҐз в вм 371.)
ђҐиҐЁҐ.
k:= n;
{Ёў аЁ в: ®бв «®бм ЇҐз в вм k ў ®Ўа ⮬ Ї®ап¤ЄҐ}
while k <> 0 do begin
| write (k mod 10);
| k:= k div 10;
end;
1.1.28. „ ® вга «м®Ґ n. Џ®¤бзЁв вм Є®«ЁзҐбвў® аҐиҐЁ©
Ґа ўҐбвў x*x + y*y < n ў вга «мле (Ґ®ваЁж ⥫мле 楫ле)
зЁб« е, Ґ ЁбЇ®«м§гп ¤Ґ©бвўЁ© б ўҐйҐб⢥묨 зЁб« ¬Ё.
ђҐиҐЁҐ.
k := 0; s := 0;
{Ёў аЁ в: s = Є®«ЁзҐбвў® аҐиҐЁ© Ґа ўҐбвў
x*x + y*y < n c x < k}
while k*k < n do begin
| ...
| {t = зЁб«® аҐиҐЁ© Ґа ўҐбвў k*k + y*y < n
| (ЇаЁ ¤ ®¬ k) }
| k := k + 1;
| s := s + t;
end;
{k*k >= n, Ї®н⮬г s = Є®«ЁзҐбвў® ўбҐе аҐиҐЁ©
Ґа ўҐбвў }
‡¤Ґбм ... - Ї®Є ҐйҐ Ґ ЇЁб л© Єгб®Є Їа®Ја ¬¬л, Є®в®ал©
Ўг¤Ґв в ЄЁ¬:
l := 0; t := 0;
{Ёў аЁ в: t = зЁб«® аҐиҐЁ©
Ґа ўҐбвў k*k + y*y < n c y < l }
while k*k + l*l < n do begin
| l := l + 1;
| t := t + 1;
end;
{k*k + l*l >= n, Ї®н⮬г t = зЁб«®
ўбҐе аҐиҐЁ© Ґа ўҐбвў k*k + y*y < n}
1.1.29. ’ ¦Ґ § ¤ з , ® Є®«ЁзҐбвў® ®ЇҐа жЁ© ¤®«¦® Ўлвм
Ї®ап¤Є (n ў б⥯ҐЁ 1/2). (‚ ЇаҐ¤л¤г饬 аҐиҐЁЁ, Є Є ¬®¦®
Ї®¤бзЁв вм, Ї®ап¤Є n ®ЇҐа жЁ©.)
ђҐиҐЁҐ. Ќ б ЁвҐаҐбгов в®зЄЁ аҐиҐвЄЁ (б 楫묨 Є®®а¤Ё в -
* ¬Ё) ў ЇҐаў®¬ Єў ¤а вҐ, Ї®Ї ¤ ойЁҐ ўгвам ЄагЈ
* * * а ¤Ёгб (n ў б⥯ҐЁ 1/2). €вҐаҐбго饥 б
* * * * ¬®¦Ґбвў® ( §®ўҐ¬ ҐЈ® X) б®бв®Ёв Ё§ ®ЎкҐ¤ЁҐ-
* * * * Ёп ўҐавЁЄ «мле бв®«Ўж®ў гЎлў о饩 ўлб®вл.
* * * * * €¤Ґп аҐиҐЁп б®бв®Ёв ў ⮬, зв®Ўл "¤ўЁЈ вмбп
ў¤®«м ҐЈ® Ја Ёжл", бЇгбЄ пбм Ї® ўҐа奬㠥Ј® Єа о, Є Є Ї®
«ҐбвЁжҐ. Љ®®а¤Ё вл ¤ўЁ¦г饩бп в®зЄЁ ®Ў®§ зЁ¬ <k,l>. ‚ўҐ¤Ґ¬
ҐйҐ ®¤г ЇҐаҐ¬Ґго s Ё Ўг¤Ґ¬ Ї®¤¤Ґа¦Ёў вм ЁбвЁ®бвм в Є®Ј® гб-
«®ўЁп:
<k,l> 室Ёвбп ба §г ¤ k-л¬ бв®«Ўж®¬;
s - зЁб«® в®зҐЄ ў ЇаҐ¤л¤гйЁе бв®«Ўж е.
”®а¬ «м®:
l - ¬ЁЁ¬ «м®Ґ б।Ё вҐе l >= 0, ¤«п Є®в®але <k,l> Ґ ЇаЁ ¤-
«Ґ¦Ёв X;
s - зЁб«® Ї а вга «мле x, y, ¤«п Є®в®але x < k Ё <x,y> ЇаЁ-
¤«Ґ¦Ёв X.
ЋЎ®§ зЁ¬ нвЁ гб«®ўЁп зҐаҐ§ (€).
k := 0; l := 0;
while "<0,l> ЇаЁ ¤«Ґ¦Ёв X" do begin
| l := l + 1;
end;
{k = 0, l - ¬ЁЁ¬ «м®Ґ б।Ё вҐе l >= 0,
¤«п Є®в®але <k,l> Ґ ЇаЁ ¤«Ґ¦Ёв X }
s := 0;
{Ёў аЁ в: €}
while not (l = 0) do begin
| s := s + l;
| {s - зЁб«® в®зҐЄ ў бв®«Ўж е ¤® k-Ј® ўЄ«озЁвҐ«м®}
| k := k + 1;
| {в®зЄ <k,l> «Ґ¦Ёв ўҐ X, ®, ў®§¬®¦®, ҐҐ ¤® б¤ўЁгвм
| ўЁ§, зв®Ўл ў®ббв ®ўЁвм € }
| while (l <> 0) and ("<k, l-1> Ґ ЇаЁ ¤«Ґ¦Ёв X") do begin
| | l := l - 1;
| end;
end;
{€, l = 0, Ї®н⮬г k-л© бв®«ЎҐж Ё ўбҐ б«Ґ¤гойЁҐ Їгбвл,
s а ў® ЁбЄ®¬®¬г зЁб«г}
ЋжҐЄ зЁб« ¤Ґ©бвўЁ© ®зҐўЁ¤ : б з « ¬л ¤ўЁ¦Ґ¬бп ўўҐае Ґ Ў®-
«ҐҐ 祬 (n ў б⥯ҐЁ 1/2) и Ј®ў, § ⥬ ўЁ§ Ё ўЇа ў® - ў
Є ¦¤го бв®а®г Ґ Ў®«ҐҐ 祬 (n ў б⥯ҐЁ 1/2) и Ј®ў.
1.1.30. „ л вга «млҐ зЁб« n Ё k, n > 1. Ќ ЇҐз в вм k
¤ҐбпвЁзле § Є®ў зЁб« 1/n. (ЏаЁ «ЁзЁЁ ¤ўге ¤ҐбпвЁзле а §«®-
¦ҐЁ© ўлЎЁа Ґвбп в® Ё§ Ёе, Є®в®а®Ґ Ґ ᮤҐа¦Ёв ¤ҐўпвЄЁ ў ЇҐаЁ-
®¤Ґ.) Џа®Ја ¬¬ ¤®«¦ ЁбЇ®«м§®ў вм в®«мЄ® жҐ«лҐ ЇҐаҐ¬ҐлҐ.
ђҐиҐЁҐ. ‘¤ўЁгў ў ¤ҐбпвЁз®© § ЇЁбЁ зЁб« 1/n § Їпвго k
¬Ґбв ўЇа ў®, Ї®«гзЁ¬ зЁб«® (10 ў б⥯ҐЁ k)/n. Ќ ¬ ¤® ЇҐз -
в вм ҐЈ® 楫го з бвм, в. Ґ. а §¤Ґ«Ёвм (10 ў б⥯ҐЁ k) n -
楫®. ‘в ¤ авл© бЇ®б®Ў вॡгҐв ЁбЇ®«м§®ў Ёп Ў®«миЁе Ї® ўҐ«Ё-
зЁҐ зЁбҐ«, Є®в®алҐ ¬®Јгв ўл©вЁ § Ја Ёжл ¤Ё Ї §® ЇаҐ¤бв ўЁ-
¬ле зЁбҐ«. Џ®н⮬㠬л ᤥ« Ґ¬ Ё зҐ (б«Ґ¤гп ®Ўл箬㠬Ґв®¤г "¤Ґ-
«ҐЁп гЈ®«Є®¬") Ё Ўг¤Ґ¬ еа Ёвм "®бв в®Є" r:
l := 0; r := 1;
{Ёў.: ЇҐз в ® l а §а冷ў 1/n, ®бв «®бм ЇҐз в вм
k - l а §а冷ў ¤а®ЎЁ r/n}
while l <> k do begin
| write ( (10 * r) div n);
| r := (10 * r) mod n;
| l := l + 1;
end;
1.1.31. „ ® вга «м®Ґ зЁб«® n > 1. ЋЇаҐ¤Ґ«Ёвм ¤«Ёг ЇҐ-
аЁ®¤ ¤ҐбпвЁз®© § ЇЁбЁ ¤а®ЎЁ 1/n.
ђҐиҐЁҐ. ЏҐаЁ®¤ ¤а®ЎЁ а ўҐ ЇҐаЁ®¤г ў Ї®б«Ґ¤®ў ⥫м®бвЁ
®бв вЄ®ў (¤®Є ¦ЁвҐ нв®; ў з бв®бвЁ, ¤® ¤®Є § вм, зв® ® Ґ
¬®¦Ґв Ўлвм ¬ҐмиҐ). Ља®¬Ґ в®Ј®, ў нв®© Ї®б«Ґ¤®ў ⥫м®бвЁ ўбҐ
ЇҐаЁ®¤ЁзҐбЄЁ Ї®ўв®апойЁҐбп ўбҐ з«Ґл а §«Ёзл, ЇаҐ¤ЇҐаЁ®¤ Ё¬Ґ-
Ґв ¤«Ёг Ґ Ў®«ҐҐ n. Џ®н⮬㠤®бв в®з® ©вЁ (n+1)-л© з«Ґ Ї®б-
«Ґ¤®ў ⥫м®бвЁ ®бв вЄ®ў Ё § ⥬ ¬ЁЁ¬ «м®Ґ k, ЇаЁ Є®в®а®¬
(n+1+k)-л© з«Ґ б®ўЇ ¤ Ґв б (n+1)-л¬.
l := 0; r := 1;
{Ёў аЁ в: r/n = १г«мв в ®вЎа блў Ёп l § Є®ў ў 1/n}
while l <> n+1 do begin
| r := (10 * r) mod n;
| l := l + 1;
end;
c := r;
{c = (n+1)-л© з«Ґ Ї®б«Ґ¤®ў ⥫м®бвЁ ®бв вЄ®ў}
r := (10 * r) mod n;
k := 0;
{r = (n+k+1)-л© з«Ґ Ї®б«Ґ¤®ў ⥫м®бвЁ ®бв вЄ®ў}
while r <> c do begin
| r := (10 * r) mod n;
| k := k + 1;
end;
1.1.32 (ќ. „Ґ©Єбва ). ”гЄжЁп f б вга «мл¬Ё аЈг¬Ґв ¬Ё
Ё § 票ﬨ ®ЇаҐ¤Ґ«Ґ в Є: f(0) = 0, f(1) = 1, f (2n) = f(n),
f (2n+1) = f (n) + f (n+1). ‘®бв ўЁвм Їа®Ја ¬¬г ўлзЁб«ҐЁп f (n)
Ї® § ¤ ®¬г n, вॡгойго Ї®ап¤Є log n ®ЇҐа жЁ©.
ђҐиҐЁҐ.
k := n; a := 1; b := 0;
{Ёў аЁ в: 0 <= k, f (n) = a * f(k) + b * f (k+1)}
while k <> 0 do begin
| if k mod 2 = 0 then begin
| | l := k div 2;
| | {k = 2l, f(k) = f(l), f (k+1) = f (2l+1) = f(l) + f(l+1),
| | f (n) = a*f(k) + b*f(k+1) = (a+b)*f(l) + b*f(l+1)}
| | a := a + b; k := l;
| end else begin
| | l := k div 2;
| | {k = 2l + 1, f(k) = f(l) + f(l+1),
| | f(k+1) = f(2l+2) = f(l+1),
| | f(n) = a*f(k) + b*f(k+1) = a*f(l) + (a+b)*f(l+1)}
| | b := a + b; k := l;
| end;
end;
{k = 0, f(n) = a * f(0) + b * f(1) = b, зв® Ё вॡ®ў «®бм}
1.1.33. ’® ¦Ґ, Ґб«Ё f(0) = 13, f(1) = 17, f(2n) =
43 f(n) + 57 f(n+1), f(2n+1) = 91 f(n) + 179 f(n+1) ЇаЁ n>=1.
“Є § ЁҐ. •а Ёвм Є®нддЁжЁҐвл ў ўла ¦ҐЁЁ f(n) зҐаҐ§ ваЁ
б®бҐ¤Ёе зЁб« .
1.1.34. „ л вга «млҐ зЁб« Ё b, ЇаЁзҐ¬ b > 0. Ќ ©вЁ
з б⮥ Ё ®бв в®Є ЇаЁ ¤Ґ«ҐЁЁ b, ®ЇҐаЁагп «Ёим б 楫묨
зЁб« ¬Ё Ё Ґ ЁбЇ®«м§гп ®ЇҐа жЁЁ div Ё mod, § ЁбЄ«о票Ґ¬ ¤Ґ«Ґ-
Ёп 2 зҐвле зЁбҐ«; зЁб«® и Ј®ў Ґ ¤®«¦® ЇаҐў®б室Ёвм
C1*log(a/b) + C2 ¤«п ҐЄ®в®але Є®бв в C1, C2.
ђҐиҐЁҐ.
b1 := b;
while b1 <= a do begin
| b1 := b1 * 2;
end;
{b1 > a, b1 = b * (ҐЄ®в®а п б⥯Ґм 2)}
q:=0; r:=a;
{Ёў аЁ в: q, r - з б⮥ Ё ®бв в®Є ЇаЁ ¤Ґ«ҐЁЁ a b1,
b1 = b * (ҐЄ®в®а п б⥯Ґм 2)}
while b1 <> b do begin
| b1 := b1 div 2 ; q := q * 2;
| { a = b1 * q + r, 0 <= r, r < 2 * b1}
| if r >= b1 then begin
| | r := r - b1;
| | q := q + 1;
| end;
end;
{q, r - з б⮥ Ё ®бв в®Є ЇаЁ ¤Ґ«ҐЁЁ a b}
1.2. Њ ббЁўл.
‚ б«Ґ¤гойЁе § ¤ з е ЇҐаҐ¬ҐлҐ x, y, z ЇаҐ¤Ї®« Ј овбп ®ЇЁ-
б л¬Ё Є Є array [1..n] of integer (n - ҐЄ®в®а®Ґ вга «м®Ґ
зЁб«®, Ў®«м襥 0), Ґб«Ё Ё®Ґ Ґ ®Ј®ў®аҐ® пў®.
1.2.1. ‡ Ї®«Ёвм ¬ ббЁў x г«п¬Ё. (ќв® ®§ з Ґв, з⮠㦮
б®бв ўЁвм да Ј¬Ґв Їа®Ја ¬¬л, Ї®б«Ґ ўлЇ®«ҐЁп Є®в®а®Ј® ўбҐ § -
票п x[1]..x[n] а ўп«Ёбм Ўл г«о, Ґ§ ўЁбЁ¬® ®в з «м®Ј®
§ зҐЁп ЇҐаҐ¬Ґ®© x.)
ђҐиҐЁҐ.
i := 0;
{Ёў аЁ в: ЇҐаўлҐ i § 票© x[1]..x[i] а ўл 0}
while i <> n do begin
| i := i + 1;
| {x[1]..x[i-1] = 0}
| x[i] := 0;
end;
1.2.2. Џ®¤бзЁв вм Є®«ЁзҐбвў® г«Ґ© ў ¬ ббЁўҐ x. (‘®бв ўЁвм
да Ј¬Ґв Їа®Ја ¬¬л, Ґ ¬ҐпойЁ© § 票п x, Ї®б«Ґ ЁбЇ®«ҐЁп Є®-
в®а®Ј® § 票Ґ ҐЄ®в®а®© 楫®© ЇҐаҐ¬Ґ®© k а ўп«®бм Ўл зЁб«г
г«Ґ© б।Ё Є®¬Ї®Ґв ¬ ббЁў x.)
ђҐиҐЁҐ.
...
{Ёў аЁ в: k= зЁб«® г«Ґ© б।Ё x[1]...x[i] }
...
1.2.3. ЌҐ ЁбЇ®«м§гп ®ЇҐа в®а ЇаЁбў Ёў Ёп ¤«п ¬ ббЁў®ў,
б®бв ўЁвм да Ј¬Ґв Їа®Ја ¬¬л, нЄўЁў «Ґвл© ®ЇҐа в®аг x:=y.
ђҐиҐЁҐ.
i := 0;
{Ёў аЁ в: § 票Ґ y Ґ Ё§¬ҐЁ«®бм, x[l] = y[l] ЇаЁ l <= i}
while i <> n do begin
| i := i + 1;
| x[i] := y[i];
end;
1.2.4. Ќ ©вЁ ¬ ЄбЁ¬г¬ Ё§ x[1]..x[n].
ђҐиҐЁҐ.
i := 1; max := x[1];
{Ёў аЁ в: max = ¬ ЄбЁ¬г¬ Ё§ x[1]..x[i]}
while i <> n do begin
| i := i + 1;
| {max = ¬ ЄбЁ¬г¬ Ё§ x[1]..x[i-1]}
| if x[i] > max then begin
| | max := x[i];
| end;
end;
1.2.5. „ ¬ ббЁў x: array [1..n] of integer, ЇаЁзс¬ x[1]
<= x[2] <= ... <= x[n]. Ќ ©вЁ Є®«ЁзҐбвў® а §«Ёзле зЁбҐ« б।Ё
н«Ґ¬Ґв®ў нв®Ј® ¬ ббЁў .
ђҐиҐЁҐ. (1 ў аЁ в)
i := 1; k := 1;
{Ёў аЁ в: k - Є®«ЁзҐбвў® а §«Ёзле зЁбҐ« б।Ё x[1]..x[i]}
while i <> n do begin
| i := i + 1;
| if x[i] <> x[i-1] then begin
| | k := k + 1;
| end;
end;
(2 ў аЁ в) €бЄ®¬®Ґ зЁб«® 1 Ў®«миҐ Є®«ЁзҐбвў вҐе зЁбҐ«
i Ё§ 1..n-1, ¤«п Є®в®але x[i] <> x[i+1].
k := 1;
for i := 1 to n-1 do begin
| if x[i]<> x[i+1] then begin
| | k := k + 1;
| end;
end;
1.2.6. (‘®®ЎйЁ« Ђ.‹.Ѓа㤮.) Џаאַ㣮«м®Ґ Ї®«Ґ m n а §-
ЎЁв® mn Єў ¤а вле Є«Ґв®Є. ЌҐЄ®в®алҐ Є«ҐвЄЁ Ї®Єа иҐл ў зҐа-
л© жўҐв. €§ўҐбв®, зв® ўбҐ зҐалҐ Є«ҐвЄЁ ¬®Јгв Ўлвм а §ЎЁвл
ҐбЄ®«мЄ® ҐЇҐаҐбҐЄ ойЁебп Ё Ґ Ё¬ҐойЁе ®ЎйЁе ўҐаиЁ зҐале Їап-
¬®гЈ®«мЁЄ®ў. ‘зЁв п, з⮠梥⠪«Ґв®Є ¤ л ў ўЁ¤Ґ ¬ ббЁў вЁЇ
array [1..m] of array [1..n] of boolean;
Ї®¤бзЁв вм зЁб«® зҐале Їаאַ㣮«мЁЄ®ў, ® Є®в®але и« аҐзм.
—Ёб«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є m*n.
ђҐиҐЁҐ. —Ёб«® Їаאַ㣮«мЁЄ®ў а ў® зЁб«г Ёе «Ґўле ўҐаеЁе
гЈ«®ў. џў«пҐвбп «Ё Є«ҐвЄ ўҐаеЁ¬ гЈ«®¬, ¬®¦® г§ вм, Ї®б¬®вॢ
ҐҐ 梥в, в Є¦Ґ 梥⠢Ґа奣® Ё «Ґў®Ј® б®бҐ¤Ґ©. (ЌҐ § -
Ўг¤мвҐ, зв® Ёе ¬®¦Ґв Ґ Ўлвм, Ґб«Ё Є«ҐвЄ б Єа о.)
1.2.7. „ ¬ ббЁў x: array [1..n] of integer. Ќ ©вЁ Є®«Ё-
зҐбвў® а §«Ёзле зЁбҐ« б।Ё н«Ґ¬Ґв®ў нв®Ј® ¬ ббЁў . (—Ёб«®
¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є n*n.)
1.2.8. ’ ¦Ґ § ¤ з , Ґб«Ё вॡгҐвбп, зв®Ўл Є®«ЁзҐбвў®
¤Ґ©бвўЁ© Ўл«® Ї®ап¤Є n* log n. (“Є § ЁҐ. ‘¬®ваЁ Ј« ўг ® б®авЁ-
а®ўЄҐ.)
1.2.9. ’ ¦Ґ § ¤ з , Ґб«Ё Ё§ўҐбв®, зв® ўбҐ н«Ґ¬Ґвл ¬ ббЁ-
ў - зЁб« ®в 1 ¤® k Ё зЁб«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є n+k.
1.2.10. „ ¬ ббЁў x [1]..x[n] 楫ле зЁбҐ«. ЌҐ ЁбЇ®«м§гп
¤агЈЁе ¬ ббЁў®ў, ЇҐаҐбв ўЁвм н«Ґ¬Ґвл ¬ ббЁў ў ®Ўа ⮬ Ї®ап¤-
ЄҐ.
ђҐиҐЁҐ. —Ёб« x [i] Ё x [n+1-i] 㦮 Ї®¬Ґпвм ¬Ґбв ¬Ё ¤«п
ўбҐе i, ¤«п Є®в®але i < n + 1 - i, в.Ґ. 2*i < n + 1 <=> 2*i <= n
<=> i <= n div 2:
for i := 1 to n div 2 do begin
| ...®Ў¬Ґпвм x [i] Ё x [n+1-i];
end;
1.2.11. (Ё§ ЄЁЈЁ „.ѓаЁб ) „ ¬ ббЁў 楫ле зЁбҐ«
x[1]..x[m+n], а бб¬ ваЁў Ґ¬л© Є Є ᮥ¤ЁҐЁҐ ¤ўге ҐЈ® ®в१Є®ў:
з « x[1]..x[m] ¤«Ёл m Ё Є®ж x[m+1]..x[m+n] ¤«Ёл n. ЌҐ Ёб-
Ї®«м§гп ¤®Ї®«ЁвҐ«мле ¬ ббЁў®ў, ЇҐаҐбв ўЁвм з «® Ё Є®Ґж.
(—Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є m+n.)
ђҐиҐЁҐ. (1 ў аЁ в). ЏҐаҐўҐаҐ¬ (а бЇ®«®¦Ё¬ ў ®Ўа ⮬ Ї®-
ап¤ЄҐ) ®в¤Ґ«м® з «® Ё Є®Ґж ¬ ббЁў , § ⥬ ЇҐаҐўҐаҐ¬ ўҐбм
¬ ббЁў Є Є Ґ¤Ё®Ґ 楫®Ґ.
(2 ў аЁ в, Ђ.ѓ.ЉгиЁаҐЄ®). ђ бб¬ ваЁў п ¬ ббЁў § ЇЁб л¬
Ї® ЄагЈг, ўЁ¤Ё¬, зв® вॡ㥬®Ґ ¤Ґ©бвўЁҐ - Ї®ў®а®в ЄагЈ . Љ Є Ё§-
ўҐбв®, Ї®ў®а®в Ґбвм Є®¬Ї®§ЁжЁп ¤ўге ®бҐўле бЁ¬¬ҐваЁ©.
(3 ў аЁ в). ђ бᬮваЁ¬ Ў®«ҐҐ ®Ўйго § ¤ зг - ®Ў¬Ґ ¤ўге
гз бвЄ®ў ¬ ббЁў x[p+1]..x[q] Ё x[q+1]..x[s]. ЏаҐ¤Ї®«®¦Ё¬, зв®
¤«Ё «Ґў®Ј® гз бвЄ ( §®ўҐ¬ ҐЈ® A) Ґ Ў®«миҐ ¤«Ёл Їа ў®Ј®
( §®ўҐ¬ ҐЈ® B). ‚뤥«Ё¬ ў B з «® в®© ¦Ґ ¤«Ёл, зв® Ё A, §®-
ўҐ¬ ҐЈ® B1, ®бв в®Є B2. (’ Є зв® B = B1 + B2, Ґб«Ё ®Ў®§ з вм
Ї«оᮬ ЇаЁЇЁблў ЁҐ ¬ ббЁў®ў ¤агЈ Є ¤агЈг.) Ќ ¬ ¤® Ё§ A + B1 +
B2 Ї®«гзЁвм B1 + B2 + A. ЊҐпп ¬Ґбв ¬Ё гз бвЄЁ A Ё B1 - ®Ё Ё¬Ґ-
ов ®¤Ё Є®ўго ¤«Ёг, Ё ᤥ« вм нв® «ҐЈЄ®,- Ї®«гз Ґ¬ B1 + A + B2,
Ё ®бв «®бм Ї®¬Ґпвм ¬Ґбв ¬Ё A Ё B2. ’Ґ¬ б ¬л¬ ¬л ᢥ«Ё ¤Ґ«® Є
ЇҐаҐбв ®ўЄҐ ¤ўге ®ва§Є®ў ¬Ґм襩 ¤«Ёл. €в Є, Ї®«гз Ґ¬ в Єго
беҐ¬г Їа®Ја ¬¬л:
p := 0; q := m; r := m + n;
{Ёў аЁ в: ®бв «®бм ЇҐаҐбв ўЁвм x[p+1]..x[q], x[q+1]..x[s]}
while (p <> q) and (q <> s) do begin
| {®Ў гз бвЄ ҐЇгбвл}
| if (q - p) <= (s - q) then begin
| | ..ЇҐаҐбв ўЁвм x[p+1]..x[q] Ё x[q+1]..x[q+(q-p)]
| | pnew := q; qnew := q + (q - p);
| | p := pnew; q := qnew;
| end else begin
| | ..ЇҐаҐбв ўЁвм x[q-(r-q)+1]..x[q] Ё x[q+1]..x[r]
| | qnew := q - (r - q); rnew := q;
| | q := qnew; r := rnew;
| end;
end;
ЋжҐЄ ўаҐ¬ҐЁ а Ў®вл: ®зҐаҐ¤®¬ и ЈҐ ®бв ўиЁ©бп ¤«п ®Ўа Ў®в-
ЄЁ гз бв®Є бв ®ўЁвбп Є®а®зҐ ¤«Ёг A; зЁб«® ¤Ґ©бвўЁ© ЇаЁ н⮬
в Є¦Ґ Їа®Ї®ажЁ® «м® ¤«ЁҐ A.
1.2.12. Љ®нддЁжЁҐвл ¬®Ј®з«Ґ еа пвбп ў ¬ ббЁўҐ a: array
[0..n] of integer (n - вга «м®Ґ зЁб«®, б⥯Ґм ¬®Ј®з«Ґ ).
‚лзЁб«Ёвм § 票Ґ нв®Ј® ¬®Ј®з«Ґ ў в®зЄҐ x (в. Ґ. a[n]*(x ў
б⥯ҐЁ n)+...+a[1]*x+a[0]).
ђҐиҐЁҐ. (ЋЇЁблў Ґ¬л© «Ј®аЁв¬ §лў Ґвбп б奬®© ѓ®аҐа .)
k := 0; y := a[n];
{Ёў аЁ в: 0 <= k <= n,
y= a[n]*(x ў б⥯ҐЁ k)+...+a[n-1]*(x ў б⥯ҐЁ k-1)+...+
+ a[n-k]*(x ў б⥯ҐЁ 0)}
while k<>n do begin
| k := k + 1;
| y := y * x + a [n - k];
end;
1.2.13. („«п § Є®¬ле б ®б®ў ¬Ё «Ё§ . ‘®®ЎйЁ« Ђ.ѓ.Љги-
ЁаҐЄ®.) „®Ї®«Ёвм «Ј®аЁв¬ ўлзЁб«ҐЁп § зҐЁп ¬®Ј®з«Ґ ў
§ ¤ ®© в®зЄҐ Ї® б奬Ґ ѓ®аҐа ўлзЁб«ҐЁҐ¬ § зҐЁп ҐЈ® Їа®Ё§-
ў®¤®© ў в®© ¦Ґ в®зЄҐ.
ђҐиҐЁҐ. „®Ў ў«ҐЁҐ ®ў®Ј® Є®нддЁжЁҐв ᮮ⢥вбвўгҐв ЇҐаҐ-
室㠮⠬®Ј®з«Ґ P(x) Є ¬®Ј®з«Ґг P(x)*x + c. …Ј® Їа®Ё§ў®¤ п
ў в®зЄҐ x а ў P'(x)*x + P(x). (ќв® аҐиҐЁҐ ®Ў« ¤ Ґв § Ў ўл¬
бў®©бвў®¬: Ґ ¤® § вм § а ҐҐ б⥯Ґм ¬®Ј®з«Ґ . …б«Ё вॡ®-
ў вм ўлЇ®«ҐЁп нв®Ј® гб«®ўЁп, ¤ ҐйҐ Їа®бЁвм ўлзЁб«пвм в®«мЄ®
§ 票Ґ Їа®Ё§ў®¤®©, Ґ гЇ®¬Ё п ® б ¬®¬ ¬®Ј®з«ҐҐ, Ї®«гз Ґвбп
Ґ в Є п г¦ Їа®бв п § ¤ з .)
1.2.14. ‚ ¬ ббЁў е
a:array [0..k] of integer Ё b: array [0..l] of integer
еа пвбп Є®нддЁжЁҐвл ¤ўге ¬®Ј®з«Ґ®ў б⥯ҐҐ© k Ё l. Џ®¬Ґб-
вЁвм ў ¬ ббЁў c: array [0..m] of integer Є®нддЁжЁҐвл Ёе Їа®Ё§-
ўҐ¤ҐЁп. (—Ёб« k, l, m - вга «млҐ, m = k + l; н«Ґ¬Ґв ¬ б-
бЁў б Ё¤ҐЄб®¬ i ᮤҐа¦Ёв Є®нддЁжЁҐв ЇаЁ x ў б⥯ҐЁ i.)
ђҐиҐЁҐ.
for i:=0 to m do begin
| c[i]:=0;
end;
for i:=0 to k do begin
| for j:=0 to l do begin
| | c[i+j] := c[i+j] + a[i]*b[j];
| end;
end;
1.2.15. ЏаҐ¤«®¦Ґл© ўлиҐ «Ј®аЁв¬ ЇҐаҐ¬®¦ҐЁп ¬®Ј®з«Ґ®ў
вॡгҐв Ї®ап¤Є n*n ¤Ґ©бвўЁ© ¤«п ЇҐаҐ¬®¦ҐЁп ¤ўге ¬®Ј®з«Ґ®ў
б⥯ҐЁ n. ЏаЁ¤г¬ вм Ў®«ҐҐ нддҐЄвЁўл© (¤«п Ў®«миЁе n) «Ј®аЁв¬,
Є®в®а®¬г ¤®бв в®з® Ї®ап¤Є (n ў б⥯ҐЁ (log 4)/(log 3))
¤Ґ©бвўЁ©.
“Є § ЁҐ. ЏаҐ¤бв ўЁ¬ ᥡҐ, зв® ¤® ЇҐаҐ¬®¦Ёвм ¤ў ¬®Ј®з-
«Ґ б⥯ҐЁ 2k. €е ¬®¦® ЇаҐ¤бв ўЁвм ў ўЁ¤Ґ
A(x)*x^k + B(x) Ё C(x)*x^k + D(x)
(§¤Ґбм x^k ®Ў®§ з Ґв x ў б⥯ҐЁ k). Џа®Ё§ўҐ¤ҐЁҐ Ёе а ў®
A(x)C(x)*x^{2k} + (A(x)D(x)+B(x)C(x))*x^k + B(x)D(x)
…бвҐбвўҐл© бЇ®б®Ў ўлзЁб«ҐЁп AC, AD+BC, BD вॡгҐв зҐвлаҐе г¬-
®¦ҐЁ© ¬®Ј®з«Ґ®ў б⥯ҐЁ k, ®¤ Є® Ёе Є®«ЁзҐбвў® ¬®¦® б®Єа -
вЁвм ¤® ваҐе б Ї®¬®ймо в Є®© еЁва®бвЁ: ўлзЁб«Ёвм AC, BD Ё
(A+B)(C+D), § ⥬ § ¬ҐвЁвм, зв® AD+BC=(A+B)(C+D)-AC-BD.
1.2.16. „ л ¤ў ў®§а бв ойЁе ¬ ббЁў x: array [1..k] of
integer Ё y: array [1..l] of integer. Ќ ©вЁ Є®«ЁзҐбвў® ®ЎйЁе
н«Ґ¬Ґв®ў ў нвЁе ¬ ббЁў е (в. Ґ. Є®«ЁзҐбвў® вҐе 楫ле t, ¤«п Є®-
в®але t = x[i] = y[j] ¤«п ҐЄ®в®але i Ё j). (—Ёб«® ¤Ґ©бвўЁ© Ї®-
ап¤Є k+l.)
ђҐиҐЁҐ.
k1:=0; l1:=0; n:=0;
{Ёў аЁ в: 0<=k1<=k; 0<=l1<=l; ЁбЄ®¬л© ®вўҐв = n + Є®«ЁзҐбвў®
®ЎйЁе н«Ґ¬Ґв®ў ў x[k1+1]...x[k] Ё y[l1+1]..y[l]}
while (k1 <> k) and (l1 <> l) do begin
| if x[k1+1] < y[l1+1] then begin
| | k1 := k1 + 1;
| end else if x[k1+1] > y[l1+1] then begin
| | l1 := l1 + 1;
| end else begin {x[k1+1] = y[l1+1]}
| | k1 := k1 + 1;
| | l1 := l1 + 1;
| | n := n + 1;
| end;
end;
{k1 = k Ё«Ё l1 = l, Ї®н⮬㠮¤® Ё§ ¬®¦Ґбвў, гЇ®¬пгвле ў
Ёў аЁ вҐ, Їгбв®, n а ў® ЁбЄ®¬®¬г ®вўҐвг}
‡ ¬Ґз ЁҐ. ‚ ваҐв쥩 «мвҐа вЁўҐ ¤®бв в®з® Ўл«® Ўл 㢥«ЁзЁў вм
®¤г Ё§ ЇҐаҐ¬Ґле k1, l1; ўв®а п ¤®Ў ў«Ґ ¤«п бЁ¬¬ҐваЁЁ.
1.2.17. ђҐиЁвм ЇаҐ¤л¤гйго § ¤ зг, Ґб«Ё Ё§ўҐбв® «Ёим, зв®
x[1] <= ... <= x[k] Ё y[1] <= ... <= y[l] (ў®§а бв ЁҐ § ¬ҐҐ®
ҐгЎлў ЁҐ¬).
ђҐиҐЁҐ. “б«®ўЁҐ ў®§а бв Ёп Ўл«® ЁбЇ®«м§®ў ® ў ваҐв쥩
«мвҐа вЁўҐ ўлЎ®а : б¤ўЁгў k1 Ё l1 1, ¬л ⥬ б ¬л¬ г¬Ґми -
«Ё 1 Є®«ЁзҐбвў® ®ЎйЁе н«Ґ¬Ґв®ў ў x[k1+1]...x[k] Ё
x[l1+1]...x[l]. ’ҐЇҐам нв® ЇаЁ¤Ґвбп ¤Ґ« вм б«®¦ҐҐ.
...
end else begin {x[k1+1] = y[l1+1]}
| t := x [k1+1];
| while (k1<k) and (x[k1+1]=t) do begin
| | k1 := k1 + 1;
| end;
| while (l1<l) and (x[l1+1]=t) do begin
| | l1 := l1 + 1;
| end;
end;
‡ ¬Ґз ЁҐ. ќв Їа®Ја ¬¬ Ё¬ҐҐв ¤ҐдҐЄв: ЇаЁ Їа®ўҐаЄҐ гб«®ўЁп
(l1<l) and (x[l1+1]=t)
(Ё«Ё ўв®а®Ј®, «®ЈЁз®Ј®) ЇаЁ «®¦®© ЇҐаў®© бЄ®ЎЄҐ ўв®а п ®Є -
¦Ґвбп ЎҐбб¬лб«Ґ®© (Ё¤ҐЄб ўл©¤Ґв § Ја Ёжл ¬ ббЁў ) Ё ў®§ЁЄ-
Ґв ®иЁЎЄ . ЌҐЄ®в®алҐ ўҐабЁЁ Ї бЄ «п, ўлзЁб«пп (A and B), б з -
« ўлзЁб«пов A Ё ЇаЁ «®¦®¬ A Ґ ўлзЁб«пов B. (’ Є ўҐ¤Ґв ᥡп,
ЇаЁ¬Ґа, бЁб⥬ Turbo Pascal, 5.0 - ® Ґ 3.0.) ’®Ј¤ ®ЇЁб -
п ®иЁЎЄ Ґ ў®§ЁЄҐв.
Ќ® Ґб«Ё ¬л Ґ е®вЁ¬ Ї®« Ј вмбп в Є®Ґ бў®©бвў® ЁбЇ®«м§г-
Ґ¬®© ¬Ё ॠ«Ё§ жЁЁ Ї бЄ «п (Ґ ЇаҐ¤гᬮв८Ґ ҐЈ® ўв®а®¬
Ќ.‚Ёа⮬), в® ¬®¦® Ї®бвгЇЁвм в Є. ‚ўҐ¤Ґ¬ ¤®Ї®«ЁвҐ«мго ЇҐаҐ-
¬Ґго b: boolean Ё ЇЁиҐ¬:
if k1 < k then b := (x[k1+1]=t) else b:=false;
{b = (k1<k) and (x[k1+1] = t}
while b do begin
| k1:=k1+1;
| if k1 < k then b := (x[k1+1]=t) else b:=false;
end;
Њ®¦® в Є¦Ґ ᤥ« вм Ё зҐ:
end else begin {x[k1+1] = y[l1+1]}
| if k1 + 1 = k then begin
| | k1 := k1 + 1;
| | n := n + 1;
| end else if x[k1+1] = x [k1+2] then begin
| | k1 := k1 + 1;
| end else begin
| | k1 := k1 + 1;
| | n := n + 1;
| end;
end;
’ Є Ўг¤Ґв Є®а®зҐ, е®вп ¬ҐҐҐ бЁ¬¬ҐваЁз®.
Ќ Є®Ґж, ¬®¦® 㢥«ЁзЁвм а §¬Ґа ¬ ббЁў ў ҐЈ® ®ЇЁб ЁЁ,
ўЄ«озЁў ў ҐЈ® дЁЄвЁўлҐ н«Ґ¬Ґвл.
1.2.18. „ л ¤ў ҐгЎлў ойЁе ¬ ббЁў x: array [1..k] of
integer Ё y: array [1..l] of integer. Ќ ©вЁ зЁб«® а §«Ёзле н«Ґ-
¬Ґв®ў б।Ё x[1],...,x[k], y[1],...,y[l]. (—Ёб«® ¤Ґ©бвўЁ© Ї®-
ап¤Є k+l.)
1.2.19. „ л ¤ў ¬ ббЁў x[1] <= ... <= x[k] Ё y[1] <= ...
<= y[l]. "‘®Ґ¤ЁЁвм" Ёе ў ¬ ббЁў z[1] <= ... <= z[m] (m = k+l;
Є ¦¤л© н«Ґ¬Ґв ¤®«¦Ґ ўе®¤Ёвм ў ¬ ббЁў z бв®«мЄ® а §, бЄ®«мЄ®
а § ® ўе®¤Ёв ў ®ЎйҐ© б«®¦®бвЁ ў ¬ ббЁўл x Ё y). —Ёб«® ¤Ґ©бвўЁ©
Ї®ап¤Є m.
ђҐиҐЁҐ.
k1 := 0; l1 := 0;
{Ёў аЁ в: ®вўҐв Ї®«гзЁвбп, Ґб«Ё Є z[1]..z[k1+l1] ЇаЁЇЁб вм
бЇа ў ᮥ¤ЁҐЁҐ ¬ ббЁў®ў x[k1+1]..x[k] Ё y[l1+1]..y[l]}
while (k1 <> k) or (l1 <> l) do begin
| if k1 = k then begin
| | {l1 < l}
| | l1 := l1 + 1;
| | z[k1+l1] := y[l1];
| end else if l1 = l then begin
| | {k1 < k}
| | k1 := k1 + 1;
| | z[k1+l1] := x[k1];
| end else if x[k1+1] <= y[l1+1] then begin
| | k1 := k1 + 1;
| | z[k1+l1] := x[k1];
| end else if x[k1+1] >= y[l1+1] then begin
| | l1 := l1 + 1;
| | z[k1+l1] := y[l1];
| end else begin
| | { в Є®Ј® Ґ Ўлў Ґв }
| end;
end;
{k1 = k, l1 = l, ¬ ббЁўл ᮥ¤ЁҐл}
ќв®в Їа®жҐбб ¬®¦® Ї®пбЁвм в Є. Џгбвм г б Ґбвм ¤ўҐ бв®ЇЄЁ
Є ав®зҐЄ, ®вб®авЁа®ў ле Ї® «д ўЁвг. Њл ᮥ¤ЁпҐ¬ Ёе ў ®¤г
бв®ЇЄг, ўлЎЁа п Є ¦¤л© а § вг Ё§ ўҐаеЁе Є ав®зҐЄ ®ЎҐЁе бв®Ї®Є,
Є®в®а п Ё¤Ґв а миҐ ў «д ўЁв®¬ Ї®ап¤ЄҐ.
1.2.20. „ л ¤ў ¬ ббЁў x[1] <= ... <= x[k] Ё y[1] <= ...
<= y[l]. Ќ ©вЁ Ёе "ЇҐаҐбҐзҐЁҐ", в.Ґ. ¬ ббЁў z[1] <= ... <=
z[m], ᮤҐа¦ йЁ© Ёе ®ЎйЁҐ н«Ґ¬Ґвл, ЇаЁзҐ¬ Єа в®бвм Є ¦¤®Ј®
н«Ґ¬Ґв ў ¬ ббЁўҐ z а ўпҐвбп ¬ЁЁ¬г¬г Ё§ ҐЈ® Єа в®б⥩ ў ¬ б-
бЁў е x Ё y. —Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є k+l.
1.2.21. „ л ¤ў ¬ ббЁў x[1]<=...<=x[k] Ё y[1]<=...<=y[l]
Ё зЁб«® q. Ќ ©вЁ б㬬㠢Ё¤ x[i]+y[j], ЁЎ®«ҐҐ Ў«Ё§Єго Є зЁб«г
q. (—Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є k+l, ¤®Ї®«ЁвҐ«м п Ї ¬пвм - дЁЄбЁа®-
ў ®Ґ зЁб«® 楫ле ЇҐаҐ¬Ґле, б ¬Ё ¬ ббЁўл ¬Ґпвм Ґ а §аҐи Ґв-
бп.)
“Є § ЁҐ. Ќ ¤® ©вЁ ¬ЁЁ¬ «м®Ґ а ббв®пЁҐ ¬Ґ¦¤г н«Ґ¬Ґв -
¬Ё x[1]<=...<=x[k] Ё q-y[l]<=..<=q-y[1], зв® Ґва㤮 ᤥ« вм ў
室Ґ Ёе б«ЁпЁп ў ®¤Ё (ў®®Ўа ¦ Ґ¬л©) ¬ ббЁў.
1.2.22. (Ё§ ЄЁЈЁ „.ѓаЁб ) ЌҐЄ®в®а®Ґ зЁб«® ᮤҐа¦Ёвбп ў
Є ¦¤®¬ Ё§ ваҐе 楫®зЁб«Ґле ҐгЎлў ойЁе ¬ ббЁў®ў x[1] <= ... <=
x[p], y[1] <= ... <= y[q], z[1] <= ... <= z[r]. Ќ ©вЁ ®¤® Ё§
в ЄЁе зЁбҐ«. —Ёб«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є p + q + r.
ђҐиҐЁҐ.
p1:=1; q1=1; r1:=1;
{Ёў аЁ в: x[p1]..x[p], y[q1]..y[q], z[r1]..z[r]
ᮤҐа¦ в ®ЎйЁ© н«Ґ¬Ґв }
while not ((x[p1]=y[q1]) and (y[q1]=z[r1])) do begin
| if x[p1]<y[q1] then begin
| | p1:=p1+1;
| end else if y[q1]<z[r1] then begin
| | q1:=q1+1;
| end else if z[r1]<x[p1] then begin
| | r1:=r1+1;
| end else begin
| | { в Є Ґ Ўлў Ґв }
| end;
end;
{x[p1] = y[q1] = z[r1]}
writeln (x[p1]);
1.2.23. ’ ¦Ґ § ¤ з , в®«мЄ® § а ҐҐ Ґ Ё§ўҐбв®, бгйҐбвўг-
Ґв «Ё ®ЎйЁ© н«Ґ¬Ґв ў ваҐе ҐгЎлў ойЁе ¬ ббЁў е Ё вॡгҐвбп нв®
ўлпбЁвм (Ё ©вЁ ®¤Ё Ё§ ®ЎйЁе н«Ґ¬Ґв®ў, Ґб«Ё ®Ё Ґбвм).
1.2.24. ќ«Ґ¬Ґв ¬Ё ¬ ббЁў a[1..n] пў«повбп ҐгЎлў ойЁҐ
¬ ббЁўл [1..m] 楫ле зЁбҐ« (a: array [1..n] of array [1..m] of
integer; a[1][1] <= ... <= a[1][m], ..., a[n][1] <= ... <=
a[n][m]). €§ўҐбв®, зв® бгйҐбвўгҐв зЁб«®, ўе®¤п饥 ў® ўбҐ ¬ ббЁ-
ўл a[i] (бгйҐбвўгҐв в Є®Ґ е, зв® ¤«п ўбпЄ®Ј® i Ё§ [1..n]
©¤свбп j Ё§ [1..m], ¤«п Є®в®а®Ј® a[i][j]=x). Ќ ©вЁ ®¤® Ё§ в -
ЄЁе зЁбҐ« е.
ђҐиҐЁҐ. ‚ўҐ¤Ґ¬ ¬ ббЁў b[1]..b[n], ®в¬Ґз ойЁ© з «® "®бв -
о饩бп з бвЁ" ¬ ббЁў®ў a[1]..a[n].
for k:=1 to n do begin
| b[k]:=1;
end;
eq := true;
for k := 2 to n do begin
| eq := eq and (a[1][b[1]] = a[k][b[k]]);
end;
{Ёў аЁ в: ®бв ўиЁҐбп з бвЁ ЇҐаҐбҐЄ овбп, в.Ґ. бгйҐбвўгҐв
в Є®Ґ е, зв® ¤«п ўбпЄ®Ј® i Ё§ [1..n] ©¤свбп j Ё§ [1..m],
Ґ ¬Ґм襥 b[i], ¤«п Є®в®а®Ј® a[i][j] = е; eq <=> ЇҐаўлҐ
н«Ґ¬Ґвл ®бв ўиЁебп з б⥩ а ўл}
while not eq do begin
| s := 1; k := 1;
| {a[s][b[s]] - ¬ЁЁ¬ «м®Ґ б।Ё a[1][b[1]]..a[k][b[k]]}
| while k <> n do begin
| | k := k + 1;
| | if a[k][b[k]] < a[s][b[s]] then begin
| | | s := k;
| | end;
| end;
| {a[s][b[s]] - ¬ЁЁ¬ «м®Ґ б।Ё a[1][b[1]]..a[n][b[n]]}
| b [s] := b [s] + 1;
| for k := 2 to n do begin
| | eq := eq and (a[1][b[1]] = a[k][b[k]]);
| end;
end;
writeln (a[1][b[1]]);
1.2.25. ЏаЁўҐ¤Ґ®Ґ аҐиҐЁҐ ЇаҐ¤л¤г饩 § ¤ зЁ вॡгҐв Ї®-
ап¤Є m*n*n ¤Ґ©бвўЁ©. ЏаЁ¤г¬ вм бЇ®б®Ў б зЁб«®¬ ¤Ґ©бвўЁ© Ї®ап¤Є
m*n.
“Є § ЁҐ. ЏаЁ¤Ґвбп Ї®¦Ґавў®ў вм бЁ¬¬ҐваЁҐ© Ё ўлЎа вм ®¤г
Ё§ бва®Є § ®б®ўго. „ўЁЈ пбм Ї® ®б®ў®© бва®ЄҐ, Ї®¤¤Ґа¦Ёў Ґ¬
в Є®Ґ б®®в®иҐЁҐ: ў® ўбҐе ®бв «мле бва®Є е ®в¬ҐзҐ ¬ ЄбЁ-
¬ «мл© н«Ґ¬Ґв, Ґ ЇаҐў®б室пйЁ© ⥪г饣® н«Ґ¬Ґв ®б®ў®©
бва®ЄЁ.
1.2.26. („ў®Ёзл© Ї®ЁбЄ) „ Ї®б«Ґ¤®ў ⥫м®бвм x[1] <=
... <= x[n] 楫ле зЁбҐ« Ё зЁб«® a. ‚лпбЁвм, ᮤҐа¦Ёвбп «Ё a ў
нв®© Ї®б«Ґ¤®ў ⥫м®бвЁ, в. Ґ. бгйҐбвўгҐв «Ё i Ё§ 1..n, ¤«п Є®-
в®а®Ј® x[i]=a. (Љ®«ЁзҐбвў® ¤Ґ©бвўЁ© Ї®ап¤Є log n.)
ђҐиҐЁҐ. (ЏаҐ¤Ї®« Ј Ґ¬, зв® n > 0.)
l := 1; r := n+1;
{Ґб«Ё a Ґбвм ў®®ЎйҐ, в® Ґбвм Ё б।Ё x[l]..x[r-1], r > l}
while r - l <> 1 do begin
| m := l + (r-l) div 2 ;
| {l < m < r }
| if x[m] <= a then begin
| | l := m;
| end else begin {x[m] > a}
| | r := m;
| end;
end;
(ЋЎа вЁвҐ ўЁ¬ ЁҐ, зв® Ё ў б«гз Ґ x[m] = a Ёў аЁ в Ґ аги -
Ґвбп.)
Љ ¦¤л© а § r-l 㬥ми Ґвбп ЇаЁ¬Ґа® ў¤ў®Ґ, ®вЄг¤ Ё ўл⥪ -
Ґв вॡ㥬 п ®жҐЄ зЁб« ¤Ґ©бвўЁ©.
‡ ¬Ґз ЁҐ.
l + (r-l) div 2 = (2l + (r-l)) div 2 = (r+l) div 2.
1.2.27. (€§ ЄЁЈЁ „.ѓаЁб ) „ ¬ ббЁў x: array [1..n] of
array [1..m] of integer, гЇ®а冷зҐл© Ї® "бва®Є ¬" Ё Ї®
"бв®«Ўж ¬":
x[i][j] <= x[i+1][j],
x[i][j] <= x[i][j+1]
Ё зЁб«® a. ’ॡгҐвбп ўлпбЁвм, ўбваҐз Ґвбп «Ё a б।Ё x[i][j].
ђҐиҐЁҐ. ЏаҐ¤бв ў«пп ᥡҐ ¬ ббЁў a Є Є ¬ ваЁжг (Їаאַ-
гЈ®«мЁЄ, § Ї®«Ґл© зЁб« ¬Ё), ¬л ўлЎҐаҐ¬ Їаאַ㣮«мЁЄ, ў Є®-
в®а®¬ в®«мЄ® Ё ¬®¦Ґв ᮤҐа¦ вмбп a, Ё Ўг¤Ґ¬ ҐЈ® бг¦ вм. Џаאַ-
гЈ®«мЁЄ нв®в Ўг¤Ґв ᮤҐа¦ вм x[i][j] ЇаЁ 1<=i<=l Ё k<=j<=m.
1 k m
-----------------------------------
1| |***********|
| |***********|
| |***********|
l| |***********|
|---------------------------------|
| |
n| |
-----------------------------------
(¤®ЇгбЄ овбп ЇгбвлҐ Їаאַ㣮«мЁЄЁ ЇаЁ l = 0 Ё k = m+1).
l:=n; k:=1;
{l>=0, k<=m+1, Ґб«Ё a Ґбвм, в® ў ®ЇЁб ®¬ Їаאַ㣮«мЁЄҐ}
while (l > 0) and (k < m+1) and (x[l][k] <> a) do begin
| if x[l][k] < a then begin
| | k := k + 1; {«Ґўл© бв®«ЎҐж Ґ ᮤҐа¦Ёв a, г¤ «пҐ¬ ҐЈ®}
| end else begin {x[l][k] > a}
| | l := l - 1; {Ё¦пп бва®Є Ґ ᮤҐа¦Ёв a, г¤ «пҐ¬ ҐҐ}
| end;
end;
{x[l][k] = a Ё«Ё Їаאַ㣮«мЁЄ Їгбв }
answer:= (l > 0) and (k < m+1) ;
‡ ¬Ґз ЁҐ. ‡¤Ґбм в ¦Ґ ®иЁЎЄ : x[l][k] ¬®¦Ґв ®Є § вмбп Ґ-
®ЇаҐ¤Ґ«Ґл¬. (…с ЁбЇа ў«ҐЁҐ ЇаҐ¤®бв ў«пҐвбп зЁв ⥫о.)
1.2.28. (Њ®бЄ®ўбЄ п ®«Ё¬ЇЁ ¤ Ї® Їа®Ја ¬¬Ёа®ў Ёо) „ Ґ-
гЎлў ойЁ© ¬ ббЁў Ї®«®¦ЁвҐ«мле 楫ле зЁбҐ« a[1] <= a[2] <=...<=
a[n]. Ќ ©вЁ Ё¬Ґм襥 楫®Ґ Ї®«®¦ЁвҐ«м®Ґ зЁб«®, Ґ ЇаҐ¤бв ўЁ-
¬®Ґ ў ўЁ¤Ґ бг¬¬л ҐбЄ®«мЄЁе н«Ґ¬Ґв®ў нв®Ј® ¬ ббЁў (Є ¦¤л© н«Ґ-
¬Ґв ¬ ббЁў ¬®¦Ґв Ўлвм ЁбЇ®«м§®ў Ґ Ў®«ҐҐ ®¤®Ј® а § ). —Ёб«®
¤Ґ©бвўЁ© Ї®ап¤Є n.
ђҐиҐЁҐ. Џгбвм Ё§ўҐбв®, зв® зЁб« , ЇаҐ¤бв ўЁ¬лҐ ў ўЁ¤Ґ
б㬬л н«Ґ¬Ґв®ў a[1],...,a[k], § Ї®«пов ®в१®Є ®в 1 ¤® ҐЄ®в®-
а®Ј® N. …б«Ё a[k+1] > N+1, в® N+1 Ё Ўг¤Ґв ¬ЁЁ¬ «мл¬ зЁб«®¬, Ґ
ЇаҐ¤бв ўЁ¬л¬ ў ўЁ¤Ґ б㬬л н«Ґ¬Ґв®ў ¬ ббЁў a[1]..a[n]. …б«Ё ¦Ґ
a[k+1] <= N+1, в® зЁб« , ЇаҐ¤бв ўЁ¬лҐ ў ўЁ¤Ґ б㬬л н«Ґ¬Ґв®ў
a[1]..a[k+1], § Ї®«пов ®в१®Є ®в 1 ¤® N+a[k+1].
k := 0; N := 0;
{Ёў аЁ в: зЁб« , ЇаҐ¤бв ўЁ¬лҐ ў ўЁ¤Ґ б㬬л н«Ґ¬Ґв®ў ¬ ббЁў
a[1]..a[k], § Ї®«пов ®в१®Є 1..N}
while (k <> n) and (a[k+1] <= N+1) do begin
| N := N + a[k+1];
| k := k + 1;
end;
{(k = n) Ё«Ё (a[k+1] > N+1); ў ®Ў®Ёе б«гз пе ®вўҐв N+1}
writeln (N+1);
(‘®ў в®в ¦Ґ ¤ҐдҐЄв: ў гб«®ўЁЁ жЁЄ« ЇаЁ «®¦®¬ ЇҐаў®¬ гб«®ўЁЁ
ўв®а®Ґ Ґ ®ЇаҐ¤Ґ«Ґ®.)
1.2.29. („«п § Є®¬ле б ®б®ў ¬Ё «ЈҐЎал) ‚ 楫®зЁб«Ґ®¬
¬ ббЁўҐ a[1]..a[n] еа Ёвбп ЇҐаҐбв ®ўЄ зЁбҐ« 1..n (Є ¦¤®Ґ Ё§
зЁбҐ« ўбваҐз Ґвбп Ї® ®¤®¬г а §г).
( ) ЋЇаҐ¤Ґ«Ёвм зҐв®бвм ЇҐаҐбв ®ўЄЁ. (€ ў ( ), Ё ў (Ў) Є®-
«ЁзҐбвў® ¤Ґ©бвўЁ© Ї®ап¤Є n.)
(Ў) ЌҐ ЁбЇ®«м§гп ¤агЈЁе ¬ ббЁў®ў, § ¬ҐЁвм ЇҐаҐбв ®ўЄг
®Ўа вго (Ґб«Ё ¤® а Ў®вл Їа®Ја ¬¬л a[i]=j, в® Ї®б«Ґ ¤®«¦® Ўлвм
a[j]=i).
“Є § ЁҐ. ( ) —Ґв®бвм ЇҐаҐбв ®ўЄЁ ®ЇаҐ¤Ґ«пҐвбп Є®«Ё-
зҐбвў®¬ жЁЄ«®ў. —в®Ўл ®в«Ёз вм 㦥 Їа®©¤ҐлҐ жЁЄ«л, г Ёе н«Ґ-
¬Ґв®ў ¬®¦®, ЇаЁ¬Ґа, ¬Ґпвм § Є. (Ў) ЋЎа 饨Ґ Їа®Ё§ў®¤Ё¬ Ї®
жЁЄ« ¬.
1.2.30. „ ¬ ббЁў a[1..n] Ё зЁб«® b. ЏҐаҐбв ўЁвм зЁб« ў
¬ ббЁўҐ в ЄЁ¬ ®Ўа §®¬, зв®Ўл б«Ґў ®в ҐЄ®в®а®© Ја Ёжл бв®п«Ё
зЁб« , ¬ҐмиЁҐ Ё«Ё а ўлҐ b, бЇа ў ®в Ја Ёжл - Ў®«миЁҐ Ё«Ё
а ўлҐ b.
ђҐиҐЁҐ.
l:=0; r:=n;
{Ёў аЁ в: a[1]..a[l]<=b; a[r+1]..a[n]>=b}
while l <> r do begin
| if a[l+1] <= b then begin
| | l:=l+1;
| end else if a[r] >=b then begin
| | r:=r-1;
| end else begin {a[l+1]>b; a[r]<b}
| | Ї®¬Ґпвм a[l+1] Ё a[r]
| | l:=l+1; r:+r-1;
| end;
end;
1.2.31. ’ ¦Ґ § ¤ з , ® вॡгҐвбп, зв®Ўл б з « и«Ё н«Ґ-
¬Ґвл, ¬ҐмиЁҐ b, § ⥬ а ўлҐ b, «Ёим § ⥬ Ў®«миЁҐ b.
ђҐиҐЁҐ. ’ҐЇҐам Ї®вॡговбп ваЁ Ја Ёжл: ¤® ЇҐаў®© Ўг¤гв
Ё¤вЁ н«Ґ¬Ґвл, ¬ҐмиЁҐ b, ®в ЇҐаў®© ¤® ўв®а®© - а ўлҐ b, § ⥬
ҐЁ§ўҐбв® Є ЄЁҐ ¤® ваҐв쥩, Ї®б«Ґ ваҐв쥩 - Ў®«миЁҐ b. (Ѓ®«ҐҐ
бЁ¬¬ҐваЁз®Ґ аҐиҐЁҐ ЁбЇ®«м§®ў «® Ўл зҐвлॠЈа Ёжл, ® ўап¤ «Ё
ЁЈа бв®Ёв ᢥз.) ‚ Є зҐб⢥ ®зҐаҐ¤®Ј® а бб¬ ваЁў Ґ¬®Ј® н«Ґ¬Ґ-
в ЎҐаҐ¬ н«Ґ¬Ґв бЇа ў ®в б।Ґ© Ја Ёжл.
l:=0; m:=0; r:=n;
{Ёў аЁ в: a[1..l]<b; a[l+1..m]=b; a[r+1]..a[n]>b}
while m <> r do begin
| if a[m+1]=b then begin
| | m:=m+1;
| end else if a[m+1]>b then begin
| | ®Ў¬Ґпвм a[m+1] Ё a[r]
| | r:=r-1;
| end else begin {a[m+1]<b}
| | ®Ў¬Ґпвм a[m+1] Ё a[l+1]
| | l:=l+1; m:=m+1;
end;
1.2.32. (ў ਠ⠯।л¤г饩 § ¤ зЁ, §ў л© ў ЄЁЈҐ
„Ґ©Єбвал § ¤ 祩 ® Ј®«« ¤бЄ®¬ д« ЈҐ) ‚ ¬ ббЁўҐ бв®пв зЁб« 0, 1
Ё 2. ЏҐаҐбв ўЁвм Ёе ў Ї®ап¤ЄҐ ў®§а бв Ёп, Ґб«Ё Ґ¤Ёб⢥®©
а §аҐиҐ®© ®ЇҐа жЁҐ© (Ї®¬Ё¬® з⥨п) ¤ ¬ ббЁў®¬ пў«пҐвбп ЇҐ-
аҐбв ®ўЄ ¤ўге н«Ґ¬Ґв®ў.
1.2.33. „ ¬ ббЁў a[1]..a[n] Ё зЁб«® m<=n. „«п Є ¦¤®©
ЈагЇЇл Ё§ m бв®пйЁе а冷¬ з«Ґ®ў (в ЄЁе ЈагЇЇ, ®зҐўЁ¤®, n-m+1)
ўлзЁб«Ёвм ҐҐ б㬬г. ЋЎйҐҐ зЁб«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®ап¤Є n.
ђҐиҐЁҐ. ЏҐаҐе®¤п ®в ЈагЇЇл Є б®бҐ¤Ґ©, ¬л ¤®Ў ў«пҐ¬ ®¤Ё
з«Ґ, ¤агЈ®© ўлзЁв Ґ¬.
1.2.34. „ Єў ¤а в п в Ў«Ёж a[1..n][1..n] Ё зЁб«® m<=n.
„«п Є ¦¤®Ј® Єў ¤а в а §¬Ґа m m ў нв®© в Ў«ЁжҐ ўлзЁб«Ёвм
б㬬г бв®пйЁе ў Ґ¬ зЁбҐ«. ЋЎйҐҐ зЁб«® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ї®-
ап¤Є n*n.
ђҐиҐЁҐ. ‘ з « ¤«п Є ¦¤®Ј® Ј®аЁ§®в «м®Ј® Їаאַ㣮«мЁЄ
а §¬Ґа®¬ n 1 ўлзЁб«пҐ¬ б㬬г бв®пйЁе ў Ґ¬ зЁбҐ«. (ЏаЁ б¤ўЁЈҐ
в Є®Ј® Їаאַ㣮«мЁЄ Ї® Ј®аЁ§®в «Ё 1 㦮 ¤®Ў ўЁвм ®¤®
зЁб«® Ё ®¤® ўлзҐбвм.) ‡ ⥬, ЁбЇ®«м§гп нвЁ б㬬л, ўлзЁб«пҐ¬
бг¬¬л ў Єў ¤а в е. (ЏаЁ б¤ўЁЈҐ Єў ¤а в Ї® ўҐавЁЄ «Ё ¤®Ў ў«пҐвбп
Ї®«®бЄ , ¤агЈ п Ї®«®бЄ гЎ ў«пҐвбп.)
1.3. €¤гЄвЁўлҐ дгЄжЁЁ (Ї® Ђ.ѓ.ЉгиЁаҐЄ®).
Џгбвм M - ҐЄ®в®а®Ґ ¬®¦Ґбвў®. ”гЄжЁп f, аЈг¬Ґв ¬Ё Є®в®-
а®© пў«повбп Ї®б«Ґ¤®ў ⥫м®бвЁ н«Ґ¬Ґв®ў ¬®¦Ґбвў M, § зҐ-
Ёп¬Ё - н«Ґ¬Ґвл ҐЄ®в®а®Ј® ¬®¦Ґбвў N, §лў Ґвбп Ё¤гЄвЁў®©,
Ґб«Ё ҐҐ § 票Ґ Ї®б«Ґ¤®ў ⥫м®бвЁ x[1]..x[n] ¬®¦® ў®ббв -
®ўЁвм Ї® ҐҐ § зҐЁо Ї®б«Ґ¤®ў ⥫м®бвЁ x[1]..x[n-1] Ё Ї®
x[n], в. Ґ. Ґб«Ё бгйҐбвўгҐв дгЄжЁп F Ё§ N*M (¬®¦Ґбвў® Ї а
<n,m>, Ј¤Ґ n - н«Ґ¬Ґв ¬®¦Ґбвў N, m - н«Ґ¬Ґв ¬®¦Ґбвў M) ў
N, ¤«п Є®в®а®©
f(<x[1],...,x[n]>) = F (f (<x[1],...,x[n-1]>), x[n]).
‘奬 «Ј®аЁв¬ ўлзЁб«ҐЁп Ё¤гЄвЁў®© дгЄжЁЁ:
k := 0; f := f0;
{Ёў аЁ в: f - § 票Ґ дгЄжЁЁ <x[1],...,x[k]>}
while k<> n do begin
| k := k + 1;
| f := F (f, x[k]);
end;
‡¤Ґбм f0 - § 票Ґ дгЄжЁЁ Їгбв®© Ї®б«Ґ¤®ў ⥫м®бвЁ
(Ї®б«Ґ¤®ў ⥫м®бвЁ ¤«Ёл 0). …б«Ё дгЄжЁп f ®ЇаҐ¤Ґ«Ґ в®«мЄ®
ҐЇгбвле Ї®б«Ґ¤®ў ⥫м®бвпе, в® ЇҐаў п бва®Є § ¬ҐпҐвбп
"k := 1; f := f (<x[1]>);".
€¤гЄвЁўлҐ а биЁаҐЁп.
…б«Ё дгЄжЁп f Ґ пў«пҐвбп Ё¤гЄвЁў®©, Ї®«Ґ§® ЁбЄ вм ҐҐ
Ё¤гЄвЁў®Ґ а биЁаҐЁҐ - в Єго Ё¤гЄвЁўго дгЄжЁо g, § 票п
Є®в®а®© ®ЇаҐ¤Ґ«пов § 票п f (нв® § зЁв, зв® бгйҐбвўгҐв в Є п
дгЄжЁп t, зв® f (<x[1]...x[n]>) = t (g (<x[1]...x[n]>)) ЇаЁ
ўбҐе <x[1]...x[n]>). Њ®¦® ¤®Є § вм, зв® б।Ё ўбҐе Ё¤гЄвЁўле
а биЁаҐЁ© бгйҐбвўгҐв ¬ЁЁ¬ «м®Ґ а биЁаҐЁҐ F (¬ЁЁ¬ «м®бвм
®§ з Ґв, зв® ¤«п «оЎ®Ј® Ё¤гЄвЁў®Ј® а биЁаҐЁп g § 票п F
®ЇаҐ¤Ґ«повбп § 票ﬨ g).
1.3.1. “Є § вм Ё¤гЄвЁўлҐ а биЁаҐЁп ¤«п б«Ґ¤гойЁе
дгЄжЁ©:
) б।ҐҐ аЁд¬ҐвЁзҐбЄ®Ґ Ї®б«Ґ¤®ў ⥫м®бвЁ ўҐйҐб⢥ле
зЁбҐ«;
Ў) зЁб«® н«Ґ¬Ґв®ў Ї®б«Ґ¤®ў ⥫м®б⨠楫ле зЁбҐ«, а ўле ҐҐ
¬ ЄбЁ¬ «м®¬г н«Ґ¬Ґвг;
ў) ўв®а®© Ї® ўҐ«ЁзЁҐ н«Ґ¬Ґв Ї®б«Ґ¤®ў ⥫м®б⨠楫ле зЁбҐ«
(в®в, Є®в®ал© Ўг¤Ґв ўв®ал¬, Ґб«Ё ЇҐаҐбв ўЁвм з«Ґл ў ҐгЎлў о饬
Ї®ап¤ЄҐ);
Ј) ¬ ЄбЁ¬ «м®Ґ зЁб«® Ё¤гйЁе Ї®¤ап¤ ®¤Ё Є®ўле н«Ґ¬Ґв®ў;
¤) ¬ ЄбЁ¬ «м п ¤«Ё ¬®®в®®Ј® (ҐгЎлў о饣® Ё«Ё Ґў®§-
а бв о饣®) гз бвЄ Ё§ Ё¤гйЁе Ї®¤ап¤ н«Ґ¬Ґв®ў ў Ї®б«Ґ¤®ў -
⥫м®б⨠楫ле зЁбҐ«;
Ґ) зЁб«® ЈагЇЇ Ё§ Ґ¤ЁЁж, а §¤Ґ«Ґле г«п¬Ё (ў Ї®б«Ґ¤®ў -
⥫м®бвЁ г«Ґ© Ё Ґ¤ЁЁж).
ђҐиҐЁҐ.
) <б㬬 ўбҐе з«Ґ®ў Ї®б«Ґ¤®ў ⥫м®бвЁ; ¤«Ё >;
Ў) <зЁб«® н«Ґ¬Ґв®ў, а ўле ¬ ЄбЁ¬ «м®¬г; § 票Ґ ¬ ЄбЁ-
¬ «м®Ј®>;
ў) < ЁЎ®«миЁ© н«Ґ¬Ґв Ї®б«Ґ¤®ў ⥫м®бвЁ; ўв®а®© Ї® ўҐ«ЁзЁҐ
н«Ґ¬Ґв>;
Ј) <¬ ЄбЁ¬ «м®Ґ зЁб«® Ё¤гйЁе Ї®¤ап¤ ®¤Ё Є®ўле н«Ґ¬Ґв®ў; зЁб-
«® Ё¤гйЁе Ї®¤ап¤ ®¤Ё Є®ўле н«Ґ¬Ґв®ў ў Є®жҐ Ї®б«Ґ¤®ў -
⥫м®бвЁ; Ї®б«Ґ¤Ё© н«Ґ¬Ґв Ї®б«Ґ¤®ў ⥫м®бвЁ>;
¤) <¬ ЄбЁ¬ «м п ¤«Ё ¬®®в®®Ј® гз бвЄ ; ¬ ЄбЁ¬ «м п ¤«Ё
ҐгЎлў о饣® гз бвЄ ў Є®жҐ Ї®б«Ґ¤®ў ⥫м®бвЁ; ¬ ЄбЁ-
¬ «м п ¤«Ё Ґў®§а бв о饣® гз бвЄ ў Є®жҐ Ї®б«Ґ¤®ў -
⥫м®бвЁ; Ї®б«Ґ¤Ё© з«Ґ Ї®б«Ґ¤®ў ⥫м®бвЁ>;
Ґ) <зЁб«® ЈагЇЇ Ё§ Ґ¤ЁЁж, Ї®б«Ґ¤Ё© з«Ґ>.
1.3.2. (‘®®ЎйЁ« „.‚ аб®®д쥢.) „ л ¤ўҐ Ї®б«Ґ¤®ў ⥫м®бвЁ
x[1]..x[n] Ё y[1]..y[k] 楫ле зЁбҐ«. ‚лпбЁвм, пў«пҐвбп «Ё ўв®-
а п Ї®б«Ґ¤®ў ⥫м®бвм Ї®¤Ї®б«Ґ¤®ў ⥫м®бвмо ЇҐаў®©, в. Ґ. ¬®¦-
® «Ё Ё§ ЇҐаў®© ўлзҐаЄгвм ҐЄ®в®алҐ з«Ґл в Є, зв®Ўл ®бв « бм
ўв®а п. —Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є n+k.
ђҐиҐЁҐ. (1 ў аЁ в) Ѓг¤Ґ¬ бў®¤Ёвм § ¤ зг Є § ¤ зҐ
¬Ґм襣® а §¬Ґа .
n1:=n;
k1:=k;
{Ёў аЁ в: ЁбЄ®¬л© ®вўҐв <=> ў®§¬®¦®бвм Ё§ x[1]..x[n1] Ї®-
«гзЁвм y[1]..y[k1] }
while (n1 > 0) and (k1 > 0) do begin
| if x[n1] = y[k1] then begin
| | n1 := n1 - 1;
| | k1 := k1 - 1;
| end else begin
| | n1 := n1 - 1;
| end;
end;
{n1 = 0 Ё«Ё k1 = 0; Ґб«Ё k1 = 0, в® ®вўҐв - ¤ , Ґб«Ё k1 <> 0
(Ё n1 = 0), в® ®вўҐв - Ґв}
answer := (k1 = 0);
Њл ЁбЇ®«м§®ў «Ё в®, зв® Ґб«Ё x[n1] = y[k1] Ё y[1]..y[k1] -
Ї®¤Ї®б«Ґ¤®ў ⥫м®бвм x[1]..x[n1], в® y[1]..y[k1-1] - Ї®¤Ї®б«Ґ-
¤®ў ⥫м®бвм x[1]..x[n1-1].
(2 ў аЁ в) ”гЄжЁп x[1]..x[n1] |-> (¬ ЄбЁ¬ «м®Ґ k1, ¤«п
Є®в®а®Ј® y[1]..y[k1] Ґбвм Ї®¤Ї®б«Ґ¤®ў ⥫м®бвм x[1]..x[n1]) Ё-
¤гЄвЁў .
1.3.3. „ л ¤ўҐ Ї®б«Ґ¤®ў ⥫м®бвЁ x[1]..x[n] Ё y[1]..y[k]
楫ле зЁбҐ«. Ќ ©вЁ ¬ ЄбЁ¬ «мго ¤«Ёг Ї®б«Ґ¤®ў ⥫м®бвЁ, пў«п-
о饩бп Ї®¤Ї®б«Ґ¤®ў ⥫м®бвмо ®ЎҐЁе Ї®б«Ґ¤®ў ⥫м®б⥩. Љ®«Ё-
зҐбвў® ®ЇҐа жЁ© Ї®ап¤Є n*k.
ђҐиҐЁҐ (б®®ЎйҐ® Њ.Ќ.‚ ©жў ©Ј®¬, Ђ.Њ.„Ё¬Ґв¬ ®¬). ЋЎ®§-
зЁ¬ зҐаҐ§ f(n1,k1) ¬ ЄбЁ¬ «мго ¤«Ёг ®ЎйҐ© Ї®¤Ї®б«Ґ¤®ў -
⥫м®бвЁ Ї®б«Ґ¤®ў ⥫м®б⥩ x[1]..x[n1] Ё y[1]..y[k1]. ’®Ј¤
x[n1] <> y[k1] => f(n1,k1) = max (f(n1,k1-1), f(n1-1,k1));
x[n1] = y[k1] => f(n1,k1) = max (f(n1,k1-1), f(n1-1,k1),
f(n1-1,k1-1)+1 );
(Џ®бЄ®«мЄг f(n1-1,k1-1)+1 >= f(n1,k1-1), f(n1-1,k1), ў® ўв®а®¬
б«гз Ґ ¬ ЄбЁ¬г¬ ваҐе зЁбҐ« ¬®¦® § ¬ҐЁвм ваҐвмҐ Ё§ Ёе.)
Џ®н⮬㠬®¦® § Ї®«пвм в Ў«Ёжг § 票© дгЄжЁЁ f, Ё¬Ґойго
а §¬Ґа n*k. Њ®¦® ®Ў®©вЁбм Ё Ї ¬пвмо Ї®ап¤Є k (Ё«Ё n), Ґб«Ё Ё-
¤гЄвЁў® (Ї® n1) ўлЇЁб вм <f(n1,0), ..., f(n1,k)> (Є Є дгЄжЁп
®в n1 нв®в Ў®а Ё¤гЄвЁўҐ).
1.3.4 (Ё§ ЄЁЈЁ „.ѓаЁб ) „ Ї®б«Ґ¤®ў ⥫м®бвм 楫ле зЁ-
ᥫ x[1],..., x[n]. Ќ ©вЁ ¬ ЄбЁ¬ «мго ¤«Ёг ҐҐ ў®§а бв о饩
Ї®¤Ї®б«Ґ¤®ў ⥫м®бвЁ (зЁб«® ¤Ґ©бвўЁ© Ї®ап¤Є n*log(n)).
ђҐиҐЁҐ. €бЄ®¬ п дгЄжЁп Ґ Ё¤гЄвЁў , ® Ё¬ҐҐв б«Ґ¤го饥
Ё¤гЄвЁў®Ґ а биЁаҐЁҐ: ў ҐЈ® ўе®¤Ёв Ї®¬Ё¬® ¬ ЄбЁ¬ «м®© ¤«Ёл
ў®§а бв о饩 Ї®¤Ї®б«Ґ¤®ў ⥫м®бвЁ (®Ў®§ зЁ¬ ҐҐ k) в Є¦Ґ Ё зЁб-
« u[1],...,u[k], Ј¤Ґ u[i] = (¬ЁЁ¬ «мл© Ё§ Ї®б«Ґ¤Ёе з«Ґ®ў
ў®§а бв ойЁе Ї®¤Ї®б«Ґ¤®ў ⥫м®б⥩ ¤«Ёл i). ЋзҐўЁ¤®, u[1] <=
... <= u[k]. ЏаЁ ¤®Ў ў«ҐЁЁ ®ў®Ј® з«Ґ x § 票п u Ё k Є®а-
४вЁаговбп.
n1 := 1; k := 1; u[1] := x[1];
{Ёў аЁ в: k Ё u ᮮ⢥вбвўгов ¤ ®¬г ўлиҐ ®ЇЁб Ёо}
while n1 <> n do begin
| n1 := n1 + 1;
| ...
| {i - ЁЎ®«м襥 Ё§ вҐе зЁбҐ« ®в१Є 1..k, ¤«п Є®в®-
| але u[i] < x[n1]; Ґб«Ё в ЄЁе Ґв, в® i=0 }
| if i = k then begin
| | k := k + 1;
| | u[k+1] := x[n1];
| end else begin {i < k, u[i] < x[n1] <= u[i+1] }
| | u[i+1] := x[n1];
| end;
end;
”а Ј¬Ґв ... ЁбЇ®«м§гҐв Ё¤Ґо ¤ў®Ёз®Ј® Ї®ЁбЄ ; ў Ёў аЁ -
⥠гб«®ў® Ї®« Ј Ґ¬ u[0] а ўл¬ ¬Ёгб ЎҐбЄ®Ґз®бвЁ, u[k+1]
- Ї«об ЎҐбЄ®Ґз®бвЁ; и 楫м: u[i] < x[n1] <= u[i+1].
i:=0; j:=k+1;
{u[i] < x[n1] <= u[j], j > i}
while (j - i) <> 1 do begin
| s := i + (j-i) div 2; {i < s < j}
| if u[s] >= x[n1] then begin
| | j := s;
| end else begin {u[s] < x[n1]}
| | i := s;
| end;
end;
{u[i] < x[n1] <= u[j], j-i = 1}
‡ ¬Ґз ЁҐ. Ѓ®«ҐҐ Їа®б⮥ (® Ґ ¬ЁЁ¬ «м®Ґ) Ё¤гЄвЁў®Ґ
а биЁаҐЁҐ Ї®«гзЁвбп, Ґб«Ё ¤«п Є ¦¤®Ј® i еа Ёвм ¬ ЄбЁ¬ «мго
¤«Ёг ў®§а бв о饩 Ї®¤Ї®б«Ґ¤®ў ⥫м®бвЁ, ®Є зЁў о饩бп
x[i]. ќв® а биЁаҐЁҐ ЇаЁў®¤Ёв Є «Ј®аЁв¬г б зЁб«®¬ ¤Ґ©бвўЁ© Ї®-
ап¤Є n*n.
1.3.5. Љ ЄЁҐ Ё§¬ҐҐЁп 㦮 ўҐбвЁ ў аҐиҐЁҐ ЇаҐ¤л¤г饩
§ ¤ зЁ, Ґб«Ё ¤® ЁбЄ вм ¬ ЄбЁ¬ «мго ҐгЎлў ойго Ї®б«Ґ¤®ў -
⥫м®бвм?