![](/user_photo/1319_hJRrZ.png)
[ Миронченко ] Императивное и объектно-ориентированное програмирование на Turbo Pascal и Delphi
.pdf![](/html/1319/244/html_UCnnOaraXe.xg9k/htmlconvd-CzmPUH392x1.jpg)
392
затрачиваются ресурсы процессора, и программа будет работать медленнее, особенно, если операция переприсваивания должна проводиться большое число раз (например, при сортировке массивов методом пузырька (см. главу «Массивы»)).
8. Cумма цифр трехзначного числа х = (x div 100) + ((x mod 100) div 10)+(x mod 10).
10. Для доказательства можно воспользоваться, например, методом выделения квадрата двучлена. Преобразуем уравнение ax 2 + bx + c = 0 :
Сначала разделим все уравнение на а, затем прибавим и отнимем |
b 2 |
. |
|||||||||||||||
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4a 2 |
|
|
2 |
|
b |
b |
2 |
|
|
b |
2 |
|
c |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
||||||
x |
|
+ |
|
x + |
4a |
2 |
|
− |
4a |
2 |
+ |
a |
= 0 |
|
|
||
|
|
|
a |
|
|
|
|
|
|
|
|
В скобках выделим квадрат двучлена, а остальные члены уравнения перенесем в правую часть.
|
b 2 |
|
b 2 |
− 4ac |
|
x + |
|
|
= |
|
|
|
|
4a 2 |
|||
|
2a |
|
|
Если D = b 2 − 4ac < 0 , то уравнение действительных корней не имеет. В противном случае извлечем квадратный корень.
x + b = ± |
D , D = b 2 − 4ac |
2a |
2a |
Итого: x = − b ± D , если D ≥ 0 . Если D < 0 , то действительных корней нет.
2a
14. (x x )′ = (ex ln x )′ = ex ln x (1+ ln x) = xx (1+ ln x)
Можно обобщить пример, и искать производную (( f (x))g ( x ) )′ .
|
g ( x ) |
′ |
g ( x ) |
f ′(x)g (x) |
|
Ответ: (( f (x)) |
|
) = ( f (x)) |
g′(x) ln f (x) + |
|
|
|
f (x) |
||||
|
|
|
|
|
16.x or y = not(not(x) and not(y))
17.x and y = not(not(x) or not(y))
18.x xor y = (x or y) and (not (x and y))
Глава 4
6. Есть много способов решения этой задачи. Давайте рассмотрим некоторые из них (до которых я додумался)
1 вариант – в цикле каждый раз вычислять значения xk , k = 1,10 , умножать это значение на соответствующий коэффициент при степени, и прибавлять каждое слагаемое к общей сумме. При этом степень считать по формуле xk = ek ln( x) . Реализация этого метода:
S:=11;
for i:=10 downto 1 do S:=S+(11-i)*exp(i*ln(x));
Но вычисление логарифма и экспоненты от числа – очень трудоемкие операции, поэтому желательно найти более эффективный алгоритм.
2 вариант решения: если суммировать не с начала, а с конца, то легко заметить, что степени одночленов будут увеличиваться на 1. Это можно выгодно использовать: завести вспомогательную переменную, в которой будет храниться соответствующая степень переменной х. Увеличивая значения этой переменной с каждым витком цикла
![](/html/1319/244/html_UCnnOaraXe.xg9k/htmlconvd-CzmPUH393x1.jpg)
393
на х, мы избавимся от необходимости использования функции вычисления степени числа.
S:=11;
y:=1;
for i:=10 downto 1 do begin
y:=y*x;
S:=S+i*y;
end;
При такой реализации алгоритма мы затратим лишь 20 умножений и 10 сложений.
3 вариант решения еще лучше: давайте преобразуем выражение следующим образом:
х10 + 2х9 + ... +10х +11 = ((((x + 2)x + 3)x + 4)x + ... +10)x +11;
Это – так называемая схема Горнера. Сначала будем вычислять значение скобки с наибольшей степенью вложенности, и умножать ее на х. Затем вычисляем значение выражения скобки с вложенностью на 1 меньше и умножаем ее на х и т.д., пока не «раскрутим» все скобки.
Реализация алгоритма такая:
S:=x+2;
for i:=3 to 11 do S:=S*x+i;
При такой реализации мы затратим лишь 9 операций умножения и 10 сложения (+ операции, связанные с организацией цикла). Этот метод применим не только для многочлена, значение которого мы вычисляем в этом упражнении. Метод можно записать в гораздо более общей форме:
a0 + a1 (x − b) + a2 (x − b)2 + ... + an (x − b)n = a0 + (x − b)(a1 + (x − b)(a2 + ...(an + (x − b))))
Это и есть наиболее оптимальный алгоритм для вычисления многочленов в общем случае.
4 вариант: оказывается, можно обойтись вообще без применения оператора цикла. Чтобы задача из пункта б) не обижалась за то, что мы обошли ее вниманием, решим именно ее. Преобразуем выражение следующим образом:
S = 11x10 +10x9 + ... + 2x +1 = x10 + x9 + ... + x2 + x +1+
x10 + x9 + ... + x2 + x +
x10 + x9 + ... + x2 +
... +
x10
Теперь, подсчитав суммы геометрических прогрессий в каждой из строчек (с первым членом
x10 и основанием x−1 ), получим:
S = x10 (x−11 −1) + x10 (x−10 −1) + ... + x10 (x−1 −1) = 1− x11 + (x − x11 ) + ... + (x10 − x11 ) = 1+ x + x2 + ... + x10 −11x11 |
||||
x−1 −1 |
x−1 −1 |
x−1 −1 |
1− x |
1− x |
|
|
|
11 |
|
11 |
|
|
В числителе снова прогрессия, поэтому: S = |
1 |
|
1− x |
−11x11 |
= |
1− x |
(12 −11x) |
|
|
(1− x)2 |
|||||
1− x |
1− x |
|
|
С помощью такого преобразования мы получили простую формулу для вычисления S .
|
|
|
|
|
|
|
|
|
395 |
||
22. Искать S |
|
= 1p + 2p + ... + n p |
будем в виде S |
|
|
n2 + ... + a |
|
n p+1 , где a , i = |
|
|
|
p |
p |
= a n + a |
p +1 |
1, p +1 - |
|||||||
|
|
|
1 |
2 |
|
i |
неопределенные коэффициенты. Давайте найдем их. Будем подставлять в формулу для S p вместо n числа 1,..,p+1. В результате получим следующую систему алгебраических
уравнений
1a1 +12 a2 + ... +1p+1 ap+1 = 1p
2a1 + 22 a2 + ... + 2p +1 ap +1 = 1p + 2p......................................
( p +1)a1 + ( p +1)2 a2 + ... + ( p +1)p +1 ap +1 = 1p + 2p + ... + ( p +1) p
Эту систему можно переписать, используя матричное представление, следующим образом:
Wa = M , где
|
1 |
|
2 ... |
p +1 |
|
|
|
|
a |
|
|
|
|
|
|
1p |
|
|||
|
2 |
2 |
2 |
... |
( p +1) |
2 |
|
|
|
1 |
|
|
|
|
|
|
1p + 2p |
|
||
|
1 |
|
|
|
, |
|
a2 |
|
, |
|
|
|
|
|
||||||
W = |
|
... ... |
... |
|
|
|
a = |
|
|
M = |
|
|
|
... |
|
|||||
... |
|
|
|
|
|
... |
|
|
|
|
|
|
|
|||||||
|
n+1 |
|
n+1 |
|
( p +1) |
p+1 |
|
|
|
an |
|
|
p |
+ 2 |
p |
+ ... + ( p +1) |
p |
|||
1 |
2 |
|
|
... |
|
|
|
|
|
|
1 |
|
|
|
W - матрица Вандермонда. Ее определитель, как известно, отличен от 0, значит,
ее матрица обратима. Тогда решение запишется в виде |
a = W −1M . Этот вектор a |
и |
задает неопределенные коэффициенты. |
|
|
Можно вывести формулу для вычисления W −1 |
и, соответственно, W −1M |
в |
аналитическом виде. Но это не так важно: результат получен, причем довольно красивый.
23. Допустим, что у нас есть каноническое разложение числа n! (полученное по ОТ Арифметики). Ясно, что нули в конце числа n! могут появиться лишь от произведений 5-к и двоек в каноническом разложении. Т.к. степень двойки в каноническом разложении n! будет больше, чем степень пятерки, то выходит, что кол-во нулей, на которое оканчивается n! равно степени 5-ки в каноническом разложении n!. Осталось
лишь подсчитать эту степень. Количество чисел в 1 2 3 ... n , |
делящееся на 5, равно |
||||||||
n |
. Кроме того, среди чисел, кратных 5, |
есть числа, кратные 25 (их - |
n |
каждое из |
|||||
|
|
|
|
|
), |
||||
|
|
||||||||
|
5 |
|
|
|
|
25 |
|
которых внесет в КР еще по одной 5-ке, а среди них |
n |
|
чисел, делящихся на 125 и |
|||||||||
|
||||||||||||
|
|
|
|
|
|
|
|
|
125 |
|
||
т.д. Значит |
количество пятерок в каноническом |
разложении n! равно |
||||||||||
n |
n |
n |
|
|
|
|
|
|||||
|
|
|
+ |
|
|
+ |
|
|
+ ... |
|
|
|
|
|
|
|
|
|
|||||||
5 |
|
|
25 |
125 |
|
|
|
|
|
25. Пусть lk |
- длина последовательности из чисел, |
количество цифр в которых ≤ k . |
||||
Очевидно, |
что для десятичной системы счисления выполняется условие |
|||||
|
|
|
|
|
n |
|
lk = lk −1 + 9 10k −1 k . Значит ln = 9∑k10k −1 . Если применить прием из задачи 20, то получим, |
||||||
|
|
|
|
|
k =1 |
|
что l |
|
= |
(9n −1)10n +1 |
. Отсюда легко найти, что f (1987) |
= 1984 . |
|
n |
|
9 |
||||
|
|
|
|
|
||
|
|
|
|
|
|
26. an+1 = qan + d .
![](/html/1319/244/html_UCnnOaraXe.xg9k/htmlconvd-CzmPUH396x1.jpg)
396
S |
n |
= a + (qa + d ) + (q2a + qd + d ) + ... + (qn−1a + qn−2d + ... + qd + d ) = a (1+ q + q2 + ... + qn−1 ) + |
|
|
|||||||||||||||||||||||||||||||
|
|
1 |
|
|
|
1 |
|
|
|
|
1 |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
+d + (qd + d ) + ...+ (qn−2d + ... + qd + d ) = |
a1 (1− qn ) |
+ d (1+ (1+ q) + (1+ q + q2 ) + ...+ (1+ q + q2 + ...+ qn−2 )) = |
|
||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1− q |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
= |
a1 (1− qn ) |
+ d ((n −1) + (n − 2)q + ... + 2qn−3 + qn−2 ) |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
1− q |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ответ: |
|
|
|
|
a (1− qn ) |
|
|
d (qn −1+ n(1− q)) |
, |
|
|
|
|
(при |
|
|
получается арифметическая |
||||||||||||||||||
S |
|
= |
1 |
|
|
|
|
+ |
|
|
|
|
|
|
|
|
q ≠ 1 |
|
q = 1 |
||||||||||||||||
n |
|
1− q |
|
|
(1− q)2 |
|
|
|
|
||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
прогрессия). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
27. |
а) |
От |
|
противного: |
пусть |
k pl |
|
- представимо в |
|
виде |
несократимой дроби: |
||||||||||||||||||||||||
k |
|
pl |
= |
m |
mk = pl nk mk M pl . Т.к. |
p - простое, |
то и mM p . |
Подставляя m = ps , |
получим, |
||||||||||||||||||||||||||
|
n |
||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
что и nM p . Пришли к противоречию, что доказывает иррациональность числа |
k p . |
|
|||||||||||||||||||||||||||||||||
б) |
аналогично пункту а). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
28. |
Пусть |
log |
a |
b = x . |
|
Тогда a x = b . Пусть |
a = pα1 pα2 |
...pαn |
. |
Ясно, |
что в каноническом |
||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
2 |
n |
|
|
|
|
|
||
разложении числа b |
|
должны участвовать те же числа, что и в разложении числа |
a . |
||||||||||||||||||||||||||||||||
Можно записать: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
a x = p xα1 |
p xα2 |
...p xαn |
= pβ1 |
pβ2 ...pβn = b |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(*) |
|
|||||||||||||||
|
|
|
1 |
2 |
|
|
n |
|
|
1 |
|
|
2 |
n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
Предположим, что x = |
m |
. Тогда |
|
pmα1 |
pmα2 |
...pmαn = pnβ1 |
pnβ2 ...pnβn . |
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
n |
|
|
|
1 |
2 |
|
|
n |
|
1 |
2 |
n |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Итак: |
должно |
|
выполняться |
|
|
|
|
Значит, |
|
- рациональное |
|
||||||||||||||||||||||||
|
mαi = nβi , |
i = 1, n . |
x |
|
βi = const = x i = 1, n .
αi
Замечу, что из (*), вообще говоря, не следует, что xαi = βi , i = 1, n (подумайте, почему).
Глава 6
6. Доказывать будем по индукции: |
|||
БИ: P (x) = 1 - четная функция, P (x) = x - нечетная. |
|||
0 |
|
|
1 |
ПИ: пусть для k = |
|
|
Pk (x) будет четной функцией при четных k , и нечетной |
0,n − 1 |
|||
функцией при нечетных k . |
|
ШИ: т.к. Pn (x) = 2xPn−1 (x) − Pn−2 (x) , то из ПИ следует, что Pn−2 (x) и Pn−1 (x) разной четности. Но тогда 2xPn−1 (x) и Pn−2 (x) будут одинаковой четности. А отсюда следует, что Pn (x)
будет функцией той же четности, |
что и Pn−2 (x) . Если n - четное, |
то и n − 2 четное, и |
|||||||
Pn−2 (x) - четная |
Pn (x) - четная. Для нечетного |
n доказательство |
проводится |
||||||
аналогично. |
|
|
|
|
|
|
|
|
|
7. |
Докажем первое утверждение: если f (−x) = − f (x) , то |
|
|
|
|||||
l |
0 |
|
l |
0 |
l |
|
l |
l |
|
∫ f (x)dx = ∫ f (x)dx + ∫ f (x)dx = [В 1-м инт. y = −x] = −∫ f (− y)dy + ∫ f (x)dx = −∫ f ( y)dy + ∫ f (x)dx = 0 |
|||||||||
−l |
−l |
|
0 |
l |
0 |
|
0 |
0 |
|
|
Чтобы доказать второе утверждение, докажем, |
что |
g (x)Tm (x)Tn (x) |
- нечетная |
|||||
функция при m + n нечетном ( g (x) |
- четная функция). Действительно: |
|
|||||||
g (−x)T (−x)T (−x) = (−1)m+n g(x)T (x)T (x) = [(m + n) = 2k +1] = −g (x)T (x)T (x) . |
|
||||||||
|
m |
n |
m n |
|
|
m |
n |
|
|
![](/html/1319/244/html_UCnnOaraXe.xg9k/htmlconvd-CzmPUH397x1.jpg)
|
|
|
397 |
|
Интересно то, что если g (x) = |
1 |
, |
то можно доказать более сильное утверждение: |
|
|
||||
1− x2 |
||||
|
|
|
1
∫ g (x)Tm (x)Tn (x)dx = 0 при любых m ≠ n (это свойство называется ортогональностью).
−1
9.Из утверждения задачи 6 следует, что в массиве коэффициентов многочлена Чебышева Pn−1 (x) будут чередоваться нулевые и ненулевые коэффициенты. Причем мы заранее знаем, где будут находиться нули, а значит, мы можем использовать эти места, чтобы хранить в них коэффициенты многочлена Pn−2 (x) , т.е. одного массива для решения задачи вполне достаточно. Только не забудьте, что при печати ответа
надо печатать лишь элементы массива соответствующей четности.
23. Алгоритм (сортировка слиянием) такой: делим массив на 2 части, к каждой из них применяем сортировку слиянием, а затем сливаем 2 массива в один с помощью алгоритма, использованного при решении задачи 17.
В таком виде алгоритм можно написать, только зная, что такое рекурсия. Поэтому переформулируем алгоритм так: сначала разбиваем массив на двойки элементов и упорядочиваем их. Затем сливаем двойки в четверки, далее – четверки в восьмерки и т.д., пока не получим упорядоченный массив.
Подсчитаем количество действий:
На каждом шаге (т.е. слиянии пар подмассивов в больший подмассив) количество
действий будет ci n ( ci могут быть различны в зависимости от шага, |
но от |
n – |
не |
зависят). |
|
|
|
Количество шагов как несложно видеть, равно числу k , такому, |
что 2k |
= n , |
т.е. |
k = log2 n . Следовательно, общее количество действий = cn log2 n , где |
c - некоторая |
||
константа, полученная усреднением ci . |
|
|
|
Глава 7
11. Давайте поэкспериментируем для небольших сумм денег: если банкомат может выдать необходимую сумму, то будем писать +, в противном случае -.
1 -; 2 -;3 +;4 -;5 +;6 +;7 -;8 +;9 +;10 +;
А теперь смотрите: сумму в 8, 9 или 10 тугриков банкомат выдать может. Значит, если надо выдать сумму, большую 10, то он может выдавать тройки до тех пор, пока сумму, которую ему осталось выдать, не станет равным 8, 9 или 10 тугрикам, а ее он выдать может. Вот и все решение: оно не требует даже использования циклов.
12. Можно доказать, что наибольшее число из первой тройки идущих подряд сумм, которые может выдать банкомат, равно 2k . Сначала покажем, что числа 2k − 2 , 2k −1 , 2k банкомат может выдать.
Ясно, что k = 3s + d , d - или 1, или 2.
Если d = 1, то тройка примет вид: (6s, 6s +1, 2k ) = (3 2s,3 s + k, 2k ).
Если d = 2 , то тройка примет вид: (6s + 2, 6s + 3, 2k ) = (3s + k,3 (s -1) + k, 2k ) . Значит, банкомат суммы 2k − 2, 2k −1, 2k выдать может.
Докажем теперь, что нет тройки чисел, которые банкомат мог бы выдать, и которые были бы меньше 2k − 2, 2k −1, 2k .
Докажем от противного. Пусть такая тройка существует. Одно и только одно число из этих трех делится на 3. Остальные тогда должны быть представлены в виде k + 3 a . Но
![](/html/1319/244/html_UCnnOaraXe.xg9k/htmlconvd-CzmPUH399x1.jpg)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
399 |
|
|
|
|
a |
|
a |
a |
|
|
|
|
a |
|
|
a |
|
|
a |
|
|
|
|
k |
|
|
a |
|
|
a −1 |
|
|
k |
a |
|
k |
|
|
|
1 |
|
k |
|
|
1 |
||||||||||
ϕ (n) |
= ϕ ( p1 1 |
p2 2 |
...pk k |
) = |
ϕ ( p1 |
1 ) |
ϕ ( p2 2 |
)...ϕ ( pk k |
) = ∏( pi i |
− pi i |
|
) = ∏ pi i |
|
∏ 1 |
− |
|
|
|
|
= n∏ 1 |
− |
|
|
||||||||||||||||||||||||||||||
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=1 |
|
|
|
|
|
|
|
|
i =1 |
|
|
|
i =1 |
|
|
|
pi |
|
i=1 |
|
|
pi |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Глава 8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
1. |
Пусть a - сторона треугольника, |
|
S - площадь треугольника. |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||
|
|
|
|
S |
|
|
S |
+ 3 42 |
S |
|
|
3 4n−1 |
S |
|
|
S |
|
|
|
|
∞ |
|
|
4 |
i |
S |
4 |
|
|
|
4 / 9 |
|
|
|
|
8S |
|
|
|
|
|
||||||||||||
S |
|
= S + 3 |
+ |
3 4 |
|
+ ... + |
= |
|
|
4 + |
|
|
= |
+ |
|
|
|
= |
|
|
|
|
|
||||||||||||||||||||||||||||||
Koch |
|
|
|
3 |
|
|
|
|
∑ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
9 |
|
9 |
|
|
|
|
|
9 |
|
|
|
9 |
|
|
3 |
|
|
|
|
i =1 |
|
9 |
|
3 |
|
1 |
− (4 / 9) |
|
5 |
|
|
|
|
|
||||||||||||||||
Подставляя сюда S = |
|
3 |
a2 , получим S |
|
|
|
= |
4 |
3 |
a2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
2 |
Koch |
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.Если nM2 , то последовательно переставляем диски на первый подходящий колышек по направлению часовой стрелки, причем один и тот же диск 2 раза подряд перемещать нельзя. Если же n – нечетное, то переставлять диски надо против часовой стрелки.
3.Пусть Um(n) - количество действий, необходимых для переноса пирамиды из n
дисков (нем. Umstellung – «перемещение»). Из алгоритма Um(n) = 2Um(n −1) +1, Um(0) = 0 .
Um(n) = 2(Um(n −1) +1) −1 = 2(2(Um(n − 2) +1) −1+1) −1 = 4(Um(n − 2) +1) −1 = ... = 2n −1.
Поэтому монахам придется сделать 264 −1 перемещений, прежде, чем наступит конец света. Поэтому конец света наступит нескоро.
Любопытно сравнить легенду о Ханойских башнях с другой восточной легендой. Шахматы были придуманы в Индии, и когда индийский царь узнал об этой игре, он был поражен разнообразием возможных положений фигур. Узнав, что игра была придумана одним из его подданных, царь приказал вызвать изобретателя, и щедро наградить его. Ученый, к удивлению царя, отказался от золота, а вместо этого попросил о следующем: пусть за 1-ю клетку ему выдадут 1 пшеничное зерно, за 2-ю клетку доски
– 2 зерна, за 3-ю – 4, и т. д. за n-ю клетку - 2n−1 зерен. Царь распорядился выполнить просьбу изобретателя, но когда придворные математики сосчитали количество зерен, которые захотел ученый, то поняли, как провел его мудрец.
А привел я эту легенду (в очень сокращенном варианте) потому, что общее количество зерен, которые должен был выдать царь, было в точности 264 −1.
4. Можно доказать утверждение и по индукции, но логичнее вывести его
непосредственно |
|
|
|
|
|
из |
|
|
|
|
|
|
определения: |
||||||
C m |
+ C m−1 |
= |
|
(n −1)! |
+ |
|
(n −1)! |
= |
(n − m)(n −1)!+ m(n −1)! |
= |
|
n! |
|
= C m |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||
n−1 |
n−1 |
|
m!(n − m −1)! |
|
(n − m)!(m −1)! |
|
(n − m)!m! |
|
|
m!(n − m)! |
n |
|
|||||||
|
|
|
|
|
|
|
|
|
|||||||||||
5. |
an = ad0 +2d1 +22 d2 +...+2s ds = ad0 |
(a2 )d1 (a4 )d2 ...(a2s )ds . |
Количество |
множителей в |
этом |
||||||||||||||
произведении = [log2 n]+1. |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
Можно легко |
построить |
и рекурсивный алгоритм: |
n = 2a + b , |
где |
b = n mod 2 . |
Тогда |
|||||||||||||
xn = xb (x2 )a . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9. Одной из таких подпрограмм является следующая: procedure Smth;
var x:integer; begin
x:=random(10); if (x<>5) then
exit;
![](/html/1319/244/html_UCnnOaraXe.xg9k/htmlconvd-CzmPUH400x1.jpg)