# Математика для программистов: от основ CS50 до алгоритмов Тьюринга

Источник: https://www.youtube.com/watch?v=FtG7TWHf_ag
Канал: CS50
Опубликовано: 21.08.2026

---

Ошибка на бирже Ванкувера, стоившая индексу более половины его стоимости за 22 месяца, произошла из-за банальной математической погрешности — усечения цифр вместо их округления. Как подчеркивают Дэвид Малан и Том Кроуфорд в новом курсе CS50 по математике для программистов, залог надежности любого алгоритма кроется в понимании фундаментальных числовых множеств, от нуля в натуральных числах до вычисляемых концепций Алана Тьюринга.

## 🔢 Математика для CS50: От мифов к основам счисления
[[JUMP:36:42]]

На протяжении многих лет одним из самых популярных вопросов к команде курса CS50 был: «Какая математическая база необходима, чтобы начать изучение компьютерных наук?» [36:55]. Многие потенциальные студенты опасались, что, не будучи «математиками» по складу ума, они не справятся с программированием [37:09]. Профессор Дэвид Малан (David J. Malan) неизменно отвечал на это уверенным «да» [37:09], однако долгое время у курса не было собственного специализированного ресурса, который бы закрывал пробелы в школьных знаниях. Ситуация изменилась с анонсом нового курса «Math for Introductory CS», созданного совместно с популяризатором науки и преподавателем Оксфорда и Кембриджа Томом Кроуфордом (Tom Crawford) [37:21].

### Введение в курс математики для CS50
[[JUMP:36:42]]

Дэвид Малан [36:42] официально представил Тома Кроуфорда, известного в сети как создатель проекта *tomrocksmaths.com*, в качестве ведущего нового образовательного направления [37:21]. Этот курс не задумывался как глубокое академическое исследование всех разделов высшей математики. Напротив, его цель — стать освежающим курсом или введением в те базовые концепции, которые необходимы для успешного старта в программировании, искусственном интеллекте и смежных областях [37:59].

Некоторые темы могут показаться студентам знакомыми ещё со времён начальной или средней школы, даже если знания о них со временем стали «туманными» [37:46]. Программа курса призвана дать ровно столько математического инструментария, сколько требуется, чтобы уверенно погрузиться в Computer Science, не отвлекаясь на избыточную теорию [37:59]. Важно отметить, что текущая запись является «закулисным» взглядом на процесс создания курса — это живой процесс со всеми его правками и техническими остановками [38:12]. 

Том Кроуфорд подчеркнул, что числа — это гораздо более сложная и интересная система, чем кажется на первый взгляд [41:40]. Его подход заключается в постепенном расширении горизонтов: от привычного счёта предметов до понимания структуры всей числовой прямой [41:54]. Ранее в разговоре они вскользь касались темы значимых цифр и правил округления, но фундамент обучения закладывается именно в классификации самих чисел.

### Базовые классификации и множества чисел
[[JUMP:41:40]]

Для работы с данными программисту важно понимать, с каким типом чисел он имеет дело. Том Кроуфорд предлагает начать с самого интуитивно понятного множества — **натуральных чисел** (Natural numbers) [50:23].

*   **Натуральные числа ($\mathbb{N}$):** Это числа, используемые для простого счёта объектов: 0, 1, 2, 3 и так далее [50:36]. Кроуфорд делает важное замечание: в математическом сообществе ведутся споры о включении нуля в это множество, однако для целей данного курса и CS50 ноль официально считается натуральным числом [50:48]. Для обозначения этого множества используется стилизованная буква $\mathbb{N}$ [51:02].
*   **Целые числа ($\mathbb{Z}$):** Следующим шагом становится добавление отрицательных значений. Целые числа включают в себя все натуральные числа и их отрицательные копии (кроме нуля, который остается нейтральным) [51:26]. Это множество обозначается буквой $\mathbb{Z}$ (от немецкого *Zahlen* — числа) [51:50].

Между целыми числами на числовой прямой остаются огромные «пробелы», которые заполняются **рациональными числами** (Rational numbers) [52:03]. По определению, рациональное число — это любая дробь, где и числитель, и знаменатель являются целыми числами [52:15]. Примерами служат $1/2$, $-3/2$ или известное приближение числа Пи — $22/7$ [52:43]. Критически важным правилом здесь является запрет на деление на ноль: знаменатель всегда должен быть отличным от нуля, иначе «математика ломается» [52:57]. Множество рациональных чисел обозначается буквой $\mathbb{Q}$ [53:10].

Кроуфорд наглядно демонстрирует иерархию этих множеств: любое целое число можно представить как рациональное, просто добавив единицу в знаменатель (например, $-2 = -2/1$) [54:20]. Таким образом, каждое последующее множество как бы «поглощает» предыдущее, увеличиваясь в объёме [55:13].

За пределами рациональных чисел лежат **иррациональные числа** (Irrational numbers) [55:40]. Это числа, которые принципиально невозможно представить в виде простой дроби из двух целых чисел [56:06]. Объединение рациональных и иррациональных чисел образует **действительные (вещественные) числа** (Real numbers), обозначаемые буквой $\mathbb{R}$ [56:19]. Это множество охватывает абсолютно все точки на числовой прямой [56:33]. Любое действительное число может быть представлено в виде десятичной дроби [56:47].

Завершая этот обзор, Том отмечает, что существуют и более экзотические категории — алгебраические, трансцендентные и даже «вычислимые» (computable) числа, которые особенно важны в контексте информатики [42:46]. Но перед тем как углубляться в них, необходимо детально разобрать десятичную систему счисления, основанную на латинском корне *dec* («десять») [1:05:01].

## 🔢 Архитектура десятичной системы и научная нотация
[[JUMP:1:05:01]]

### Десятичная система и магия разрядов
[[JUMP:1:05:01]]

Основой нашего понимания чисел является позиционная десятичная система счисления, где значение каждой цифры зависит от её положения относительно десятичной запятой. Том Кроуфорд (Tom Crawford) [1:05:14] демонстрирует это на примере числа 1234,567. Само название этого числа в английском (и русском) языках уже содержит в себе подсказку к его структуре: когда мы произносим «одна тысяча двести тридцать четыре», мы фактически перечисляем содержимое соответствующих разрядов [1:05:30].

Каждый разряд представляет собой степень десятки [1:05:45]. Том подробно разбирает структуру целой части числа:

*   **Тысячи:** $10^3$ ($10 \times 10 \times 10 = 1000$). В примере это одна единица в разряде тысяч [1:06:12].
*   **Сотни:** $10^2$ ($10 \times 10 = 100$). У нас две сотни [1:06:40].
*   **Десятки:** $10^1$ (просто 10). В числе три десятка, что мы называем «тридцать» [1:06:53].
*   **Единицы:** $10^0$ (любое число в нулевой степени равно единице). Здесь у нас четыре единицы [1:07:06].

Как только мы переходим за десятичную запятую, паттерн зеркально меняется [1:07:22]. Вместо умножения на десять мы начинаем делить на него, переходя к отрицательным степеням: десятым ($10^{-1}$), сотым ($10^{-2}$) и тысячным ($10^{-3}$) [1:07:35]. Чтобы не путаться в названиях и написании дробных разрядов, Том Кроуфорд предлагает оригинальный мнемонический прием, основанный на количестве цифр [1:08:00]. 

Например, число «десять» (10) состоит из двух цифр. Следовательно, десятичная дробь «одна десятая» также должна состоять из двух цифр — 0,1 [1:08:42]. Число «тысяча» (1000) содержит четыре цифры [1:09:10]. Значит, «одна тысячная» в виде десятичной дроби тоже записывается четырьмя цифрами — 0,001 (считая ноль перед запятой) [1:10:03]. В качестве примера из реальной жизни Том упоминает гонки «Формулы-1», где борьба за поул-позицию часто идет на тысячные доли секунды [1:09:35]. Ранее в разговоре они с Дэвидом Маланом (David J. Malan) уже касались того, как важно точно классифицировать числа [1:05:01], и понимание разрядов — первый шаг к этому.

### Научная нотация: стандарт представления чисел
[[JUMP:1:11:24]]

Когда математикам или программистам приходится работать с очень большими или экстремально малыми величинами, стандартная запись становится громоздкой. Здесь на помощь приходит научная нотация (scientific notation), которую в Великобритании также называют «стандартным видом» (standard form) [1:11:36]. Суть этого метода — представить любое число как произведение числа, находящегося в определенном диапазоне, на степень десятки [1:11:50].

В ходе дискуссии Том Кроуфорд и Дэвид Малан (David J. Malan) уточняют строгое правило записи [1:12:30]. Число перед степенью десятки (мантисса) должно быть больше или равно единице, но строго меньше десяти [1:18:50]. Математически это записывается как интервал $[1, 10)$ [1:19:03].

Том демонстрирует процесс преобразования на примерах:

1.  **Число 11:** Оно больше десяти, поэтому мы переносим запятую на один знак влево, получая $1,1$. Чтобы сохранить исходное значение, мы умножаем его на $10^1$. Итог: $1,1 \times 10^1$ [1:19:30].
2.  **Число 314:** Переносим запятую на два знака влево, чтобы получить число в диапазоне от 1 до 10. Итог: $3,14 \times 10^2$ (где $10^2$ — это сотни) [1:20:09].
3.  **Число 0,123:** Это число меньше единицы. Чтобы привести его к стандартному виду, мы двигаем запятую на один знак вправо. Итог: $1,23 \times 10^{-1}$ [1:20:35]. 

Отрицательная степень здесь указывает на деление на десять или, иными словами, на перенос разряда в сторону десятых долей [1:20:40]. Такая система записи позволяет мгновенно оценить масштаб (порядок) числа, что критически важно в компьютерных науках при оценке сложности алгоритмов или объемов памяти.

### Классификация десятичных дробей: от конечных до периодических
[[JUMP:1:20:47]]

Не все десятичные дроби устроены одинаково. Для корректной классификации чисел (о которой Том и Дэвид говорили в начале лекции) важно различать три типа десятичных расширений [1:20:47].

Первый тип — **конечные (терминирующиеся) десятичные дроби** [1:21:01]. Это числа, которые имеют конечное количество знаков после запятой и просто «заканчиваются». В качестве примеров Том приводит 0,123 и 0,125 [1:21:14]. В этих числах всего три позиции после запятой, и дальше за ними ничего не следует.

Второй тип — **бесконечные непериодические дроби** [1:21:27]. Они продолжаются вечно, не имея какой-либо повторяющейся структуры. Самым известным примером является число Пи ($\pi$). Том записывает его как 3,141592... и подчеркивает, что многоточие в конце — это стандартный математический символ, указывающий на бесконечную природу числа, которое никогда не остановится [1:21:39].

Третий тип — **периодические (повторяющиеся) десятичные дроби** [1:22:00]. Они также бесконечны, но в их дробной части есть группа цифр, которая циклически повторяется. Для их записи используется специальная нотация — горизонтальная черта (винкулум) над повторяющимся блоком [1:22:08]. 

В качестве примера Том приводит дробь, где после запятой следует последовательность 142857 [1:22:22]. Если над всеми этими шестью цифрами стоит черта, это означает, что число выглядит как 0,142857142857142857... и так до бесконечности [1:22:35]. Понимание этих различий подводит итог базовым знаниям о десятичной системе и степенях десятки, необходимым для дальнейшего изучения математики в CS50 [1:22:48]. Сразу после этого Том переходит к обсуждению того, как исторические ошибки в округлении влияли на реальный мир [1:34:52], но детальный разбор правил округления и значащих цифр традиционно выносится в отдельный блок теории.

## 🔢 Точность и упрощение: от биржевых крахов до основ работы с дробями
[[JUMP:1:34:52]]

### Значащие цифры и цена ошибки округления
[[JUMP:1:34:52]]

Математическая точность в программировании — это не просто вопрос эстетики кода, а фактор, способный влиять на реальную экономику. Том Кроуфорд приводит в пример поучительную историю открытия Фондовой биржи Ванкувера [1:35:04]. При расчёте биржевого индекса была допущена критическая ошибка: вместо корректного округления программа просто отсекала (транквизировала) лишние знаки после запятой [1:35:17]. В результате число вида 500.129, которое должно было превратиться в 500.13, превращалось в 500.12 [1:35:30]. Из-за того, что значения обновлялись до 3000 раз в день, ошибка накапливалась с огромной скоростью [1:35:45]. Спустя всего 22 месяца после запуска индекс потерял более 50% своей реальной стоимости исключительно из-за некорректной математики [1:35:58].

Чтобы избежать подобных катастроф, Том Кроуфорд и Дэвид Малан формулируют три фундаментальных правила работы со значащими цифрами (significant digits, или SD) [1:36:26]:

1.  **Точка отсчёта:** подсчёт значащих цифр всегда начинается с первой ненулевой цифры слева [1:36:40].
2.  **Сохранение разрядов:** нельзя просто отбрасывать цифры, если они определяют масштаб числа; необходимо использовать нули в качестве заполнителей (placeholders) [1:37:07].
3.  **Правила округления:** если следующая за последней значащей цифрой — 0, 1, 2, 3 или 4, число округляется в меньшую сторону. Если это 5, 6, 7, 8 или 9 — в большую [1:37:19].

Рассматривая пример с числом 121, которое нужно привести к двум значащим цифрам, Том показывает, что мы сохраняем «1» и «2», а стоящая следом единица заставляет нас округлить значение вниз [1:38:03]. Однако результатом будет не 12, а 120, так как ноль необходим для сохранения разрядности [1:38:28]. В случае с числом 129 при тех же условиях мы получим 130, так как девятка диктует округление вверх [1:39:07].

Особое внимание Том уделяет случаям, когда ноль сам становится значащей цифрой. Это происходит, когда он «зажат» между другими ненулевыми числами [1:40:31]. Например, в числе 1042 при округлении до трёх значащих цифр мы получим 1040: здесь ноль важен, так как он стоит между единицей и четвёркой [1:41:13]. 

Самый яркий пример — скорость света, составляющая 299 792 458 м/с [1:41:43]. Если округлить это «знаменитое число» до трёх значащих цифр, то из-за каскадного округления девяток вверх мы получим 300 000 000 [1:42:40]. В данном контексте первые два нуля после тройки считаются значащими в соответствии с математической конвенцией [1:42:55]. При работе с десятичными дробями, такими как 0.136, правила остаются теми же: при сокращении до двух значащих цифр мы ориентируемся на первую ненулевую цифру (единицу) и округляем её соседа (тройку) вверх из-за шестёрки, получая 0.14 [1:43:52]. Ранее в разговоре они касались десятичной системы, и здесь эти знания помогают понять, почему нули в начале дроби (например, 0.0011987) служат лишь для указания разряда и не считаются значащими до появления первой единицы [1:44:21].

### Упрощение дробей и магия простых чисел
[[JUMP:1:54:37]]

Переходя к работе с рациональными числами, которые ранее были определены как отношения целых чисел, Том Кроуфорд подчеркивает важность навыка упрощения дробей [1:54:37]. Для этого используются два ключевых правила. Первое гласит: если умножить или разделить числитель и знаменатель на одно и то же число, значение дроби не изменится [1:55:15]. Так, дробь 1/2 эквивалентна 3/6, поскольку мы просто умножили обе части на 3 [1:55:41].

Второе правило опирается на понятие простых чисел (prime numbers) — целых положительных чисел, которые делятся только на единицу и на самих себя [1:56:20]. Том приводит пример: 3 — простое число, так как его можно получить только как 3 × 1, а 6 — нет, так как у него есть и другие множители, например, 3 × 2 [1:57:00].

Процесс упрощения (сокращения) дроби — это поиск общих множителей в её верхней и нижней частях:

*   **Пример с 9/12:** Мы раскладываем 9 на 3 × 3, а 12 — на 3 × 4 [1:58:08]. Общий множитель «3» сокращается, оставляя нам 3/4 [1:58:22]. Это и есть простейший вид, так как 3 — простое число, и дальнейшее разложение знаменателя (4 = 2 × 2) не даст совпадений с числителем [1:59:02].
*   **Пример с 28/42:** Том замечает, что оба числа четные, а значит, имеют общий множитель 2 [1:59:32]. Разделив обе части на два, мы получаем 14/21 [1:59:45]. 

Хотя на этом этапе 14/21 выглядит проще, Том Кроуфорд призывает всегда проверять, не являются ли полученные числа производными других множителей, чтобы достичь максимально лаконичной формы записи рационального числа [1:59:57].

## ➗ Арифметика дробей: от конкретных примеров к общим алгоритмам
[[JUMP:2:01:05]]

Работа с рациональными числами не ограничивается их определением или сокращением, которое Том Кроуфорд и Дэвид Малан обсуждали ранее [2:00:53]. Для полноценного использования математического аппарата в программировании необходимо понимать, как эффективно манипулировать дробями: умножать, делить и складывать их, переводя конкретные числовые примеры в универсальные формулы [2:01:19].

### Умножение и деление: метод взаимности
[[JUMP:2:01:33]]

Умножение дробей Том Кроуфорд называет самой простой операцией из всех [2:01:33]. Правило здесь максимально прозрачное: нужно перемножить числа «сверху» (числители) и «снизу» (знаменатели) [2:01:48]. Например, при умножении 1/2 на 3/4 мы получаем 3 в числителе (1 × 3) и 8 в знаменателе (2 × 4), что дает итог 3/8 [2:02:01]. 

Чтобы превратить этот процесс в алгоритм, пригодный для написания кода, Том вводит переменные $a, b, c$ и $d$ [2:02:29]. Общая формула умножения выглядит так:
$$\frac{a}{b} \times \frac{c}{d} = \frac{ac}{bd}$$ [2:02:54].

Деление дробей, хотя и кажется более сложным, на самом деле сводится к тому же умножению [2:04:01]. Основная концепция здесь — использование «обратной величины» (reciprocal) [2:04:14]. Том Кроуфорд объясняет это простым термином: «переверните дробь» [2:04:27]. Если нам нужно разделить 1/2 на 1/3, мы берем делитель (1/3), переворачиваем его, превращая в 3/1, и просто умножаем на первую дробь [2:04:39]. В результате 1/2 × 3/1 дает 3/2 [2:04:53].

В общем виде для любых рациональных чисел операция деления записывается следующим образом: 
$$\frac{a}{b} \div \frac{c}{d} = \frac{a}{b} \times \frac{d}{c} = \frac{ad}{bc}$$ [2:05:33].

### Сложность сложения и поиск общего знаменателя
[[JUMP:2:06:01]]

В отличие от целых чисел, где сложение является базовым навыком, в мире дробей эта операция считается самой трудной [2:06:01]. Главное ограничение заключается в том, что складывать (или вычитать) дроби можно только в том случае, если у них одинаковые знаменатели [2:06:26]. 

Если знаменатели разные, как в примере 1/2 + 1/3, их необходимо привести к общему виду, не меняя при этом значения самих дробей [2:06:53]. Том предлагает «безотказный метод», который всегда сработает в программировании: умножить числитель и знаменатель каждой дроби на знаменатель другой дроби [2:07:44]. 

Процесс выглядит так:

1. Берем 1/2 и умножаем «верх» и «низ» на 3 (знаменатель второй дроби), получая 3/6 [2:08:10].
2. Берем 1/3 и умножаем «верх» и «низ» на 2 (знаменатель первой дроби), получая 2/6 [2:08:23].
3. Поскольку теперь у нас один и тот же знаменатель (6), мы просто складываем числители: 3 + 2 = 5 [2:08:49]. Знаменатель при этом остается прежним [2:09:04]. Итоговый результат — 5/6.

Этот метод универсален, так как умножение дроби на число в виде $n/n$ (например, 3/3 или 2/2) по сути является умножением на единицу и не искажает исходную величину [2:08:23].

### Выведение универсальной формулы для Computer Science
[[JUMP:2:09:31]]

Завершая разбор арифметики, Том Кроуфорд подчеркивает, почему так важно уметь переходить от чисел к буквам. В Computer Science программист часто не знает заранее, какие именно данные введет пользователь, поэтому он должен задать общую логику обработки переменных [2:03:47]. 

Применяя описанный выше метод «взаимного умножения знаменателей» к абстрактным дробям $a/b$ и $c/d$, Том выводит финальную формулу сложения на доске [2:09:31]:
$$\frac{a}{b} + \frac{c}{d} = \frac{ad + cb}{bd}$$ [2:11:18].

Эта формула объединяет в себе все необходимые шаги: поиск общего знаменателя ($bd$) и пропорциональное изменение числителей [2:11:32]. Теперь, имея четкие уравнения для всех четырех операций, можно корректно реализовать работу с рациональными числами в любой программной среде [2:11:46]. Далее в разговоре Том и Дэвид переходят к вопросу о том, как распознать рациональное число в его десятичной форме, но детальный разбор конвертации десятичных дробей в обыкновенные останется темой для последующего обсуждения [2:20:00].

## 🧮 От цифр к дробям: алгебраический метод конвертации
[[JUMP:2:24:58]]

### Преобразование конечных десятичных дробей
[[JUMP:2:25:11]]

Процесс перевода десятичной дроби в обыкновенную часто кажется интуитивным, но Том Кроуфорд (Tom Crawford) настаивает на строгом алгоритмическом подходе, который исключает ошибки [2:27:10]. Ранее в разговоре лекторы уже касались классификации дробей, однако именно здесь Кроуфорд демонстрирует механику «превращения» на конкретном примере — числе $0,0625$ [2:26:58].

Для конечных десятичных дробей алгоритм базируется на разрядной сетке. Число $0,0625$ имеет четыре знака после запятой, что соответствует десятитысячным долям. Следовательно, его можно записать как $625/10000$ [2:25:24]. Основная работа здесь заключается в упрощении полученного выражения. Том Кроуфорд последовательно сокращает дробь, разделяя числитель и знаменатель на общие множители. Сначала он выносит пятерку: $625$ превращается в $5 \times 125$, а $10000$ — в $5 \times 2000$ [2:25:11]. После сокращения получается $125/2000$.

Процесс продолжается итеративно:

1.  Дробь $125/2000$ сокращается на $5$ до $25/400$ [2:25:52].
2.  Следующий шаг упрощения дает $5/80$ [2:26:19].
3.  Финальное сокращение на $5$ приводит к результату $1/16$ [2:26:32].

Этот пример наглядно показывает, что число, которое в десятичной записи выглядит громоздко, на самом деле является простой рациональной дробью [2:26:45]. Как отмечает Том, такая конвертация не всегда очевидна с первого взгляда, поэтому наличие четкого метода жизненно важно для работы с рациональными числами [2:27:10].

### Магия бесконечных повторений: случай 0.111…
[[JUMP:2:27:36]]

Переход к периодическим (повторяющимся) дробям требует более сложного алгебраического трюка. Том Кроуфорд вводит концепцию использования переменной $x$ для представления бесконечного числа [2:28:02]. В качестве примера берется простейшая периодическая дробь $0,111...$, которую также можно записать как $0,(1)$ или $0.1$ с чертой сверху [2:27:50].

Суть метода заключается в «сдвиге» десятичной запятой таким образом, чтобы бесконечная часть после запятой осталась идентичной оригиналу [2:28:15]. Поскольку в данном случае повторяется всего одна цифра, Том предлагает умножить $x$ на $10$ [2:28:30]. 

Математически это выглядит так:

*   Пусть $x = 0,111...$ [2:28:02]
*   Тогда $10x = 1,111...$ [2:28:42]

Теперь наступает «умная часть» метода: вычитание исходного уравнения из нового [2:28:57]. Если из $10x$ вычесть $x$, получится $9x$ [2:29:10]. С правой стороны уравнения происходит нечто удивительное: бесконечные «хвосты» из единиц полностью аннигилируют друг друга при вычитании [2:29:52]. Уравнение принимает вид $9x = 1$ [2:30:08]. Разделив обе части на $9$, мы получаем $x = 1/9$ [2:30:20]. Этот элегантный способ позволяет превратить бесконечный процесс в конечный результат, доказывая, что периодическая дробь является полноценным рациональным числом [2:33:51].

### Работа с длинными циклами и определение рациональности
[[JUMP:2:30:34]]

Алгебраический метод универсален и подходит для периодов любой длины. Том Кроуфорд демонстрирует это на примере гораздо более сложной дроби: $0,142857142857...$ [2:30:46]. Здесь цикл состоит из шести цифр. Чтобы «совместить» бесконечные хвосты, необходимо сдвинуть запятую на шесть позиций вправо [2:31:00]. Для этого число умножается на $10$ в шестой степени ($10^6$), то есть на один миллион [2:31:14].

Уравнение трансформируется следующим образом:

1.  $x = 0,142857...$
2.  $1,000,000x = 142,857,142857...$ [2:31:28]
3.  При вычитании $x$ из $1,000,000x$ получается $999,999x$ [2:32:10].
4.  На правой стороне остается целое число $142,857$, так как вся дробная часть сократилась [2:33:08].

В результате получается дробь $142,857 / 999,999$ [2:33:23]. Том признает, что процесс сокращения такой дроби вручную занял бы слишком много времени, но подтверждает, что после всех упрощений она превращается в $1/7$ [2:33:51]. Это число уже упоминалось ранее в лекции Дэвидом Маланом (David J. Malan) как классический пример рационального числа с длинным периодом.

В завершение этого блока Том Кроуфорд формулирует ключевое определение рациональности через десятичную запись [2:34:18]. Он подводит итог: если десятичная дробь либо конечна (терминирована), либо имеет повторяющийся цикл (период), её всегда можно представить в виде дроби $a/b$, а значит, она рациональна [2:34:45]. В противном случае — если цифры после запятой никогда не заканчиваются и не образуют устойчивого повторения — число классифицируется как иррациональное [2:34:58]. Таким образом, алгебраический метод служит не просто инструментом расчетов, но и фундаментальным критерием классификации чисел в математике.

## 🧶 Наглядная иерархия и «цифровая» вселенная Тьюринга
[[JUMP:2:57:54]]

Для того чтобы упорядочить знания о различных типах чисел и их взаимосвязях, Том Кроуфорд использует оригинальный метод визуализации с помощью цветных веревок, выложенных на демонстрационном столе [2:58:21]. Этот подход позволяет буквально увидеть, как одни множества поглощают другие и где проходят границы между фундаментальными математическими категориями. Ранее в разговоре они уже касались базовых определений натуральных и целых чисел, но теперь акцент смещается на их топологическую вложенность [2:58:35].

### Математика на веревках: визуализация вложенности множеств
[[JUMP:2:58:08]]

Демонстрация начинается с самого простого — **натуральных чисел**, которые Том Кроуфорд обозначает кольцом из желтой веревки [2:58:35]. В этот круг попадают числа, используемые для счета: 0, 1, 2, 3 и далее [2:58:50]. Однако математика требует расширения этой системы, что приводит к появлению **целых чисел** (integers). Чтобы показать их связь, Том берет розовую веревку и выкладывает круг большего диаметра вокруг желтого [2:59:29]. Это наглядно иллюстрирует, что любое натуральное число автоматически является целым, но в розовом кольце появляются новые элементы — отрицательные числа, такие как $-3$ или $-42$ [2:59:43].

Следующий уровень — **рациональные числа** (дроби), представленные фиолетовой веревкой [3:00:21]. Это кольцо охватывает и целые, и натуральные числа, поскольку любое целое число можно представить в виде дроби со знаменателем 1 [3:00:34]. Внутри фиолетового контура, но за пределами розового, оказываются такие значения, как $1/2$ или $22/7$ [3:00:49]. 

Ситуация кардинально меняется при переходе к **иррациональным числам**. Том Кроуфорд подчеркивает их уникальность, выкладывая красное кольцо отдельно от предыдущих: иррациональные числа по определению не могут быть записаны в виде дроби, а значит, эти множества не пересекаются [3:01:03]. Сюда попадают такие константы, как $\sqrt{2}$ и число $\pi$ [3:01:29]. Чтобы завершить картину, Том использует длинную белую веревку для обозначения **вещественных (реальных) чисел** [3:01:43].

Важный нюанс визуализации:

*   Белая веревка должна плотно облегать и фиолетовое (рациональные), и красное (иррациональные) кольца [3:03:07].
*   Между ними нет «пустого места»: любое вещественное число обязано быть либо рациональным, либо иррациональным [3:03:20].
*   В качестве финального штриха Том заменяет символ $\pi$ на столе настоящим круглым пирогом (игра слов: *pi* и *pie*), подчеркивая «вкус» математических абстракций [3:04:12].

### От древнегреческих чертежей до алгоритмов Тьюринга
[[JUMP:3:04:37]]

За пределами базовой школьной программы лежат более сложные классификации, которые Том Кроуфорд демонстрирует уже на графической схеме. Первое из них — **построимые числа** (constructible numbers) [3:05:03]. Эта концепция уходит корнями в Древнюю Грецию, где геометры пытались создавать отрезки заданной длины, используя только циркуль и линейку без делений [3:05:16]. Любое рациональное число является построимым, но к ним добавляются и некоторые иррациональные, например, $\sqrt{2}$ [3:05:41].

Более широкий класс — **алгебраические числа**. Это любые числа (включая все построимые), которые могут быть корнями полиномиального уравнения с целыми коэффициентами [3:06:23]. Том приводит пример: корень кубический из двух ($\sqrt[3]{2}$), который является решением уравнения $x^3 = 2$ [3:06:50]. 

1. Любопытный исторический факт: задача об «удвоении куба» (построение $\sqrt[3]{2}$) занимала греков веками, пока в XIX веке не было доказано, что это число алгебраическое, но не построимое [3:07:02]. 
2. Числа, не являющиеся алгебраическими, называются **трансцендентными** [3:07:42].

Особое значение для компьютерных наук имеет классификация, предложенная британским математиком Аланом Тьюрингом в 1936 году — **вычислимые числа** (computable numbers) [3:08:09]. Том определяет их как любые вещественные числа, которые можно вычислить с любой желаемой точностью с помощью конечного завершающегося алгоритма [3:08:22]. Это точка пересечения чистой математики и Computer Science.

Ярким примером вычислимого числа является $\pi$ [3:08:35]. Несмотря на его трансцендентность и бесконечную десятичную дробь, существуют алгоритмы (например, алгоритм братьев Чудновских), позволяющие вычислять его знаки [3:08:48]. На момент записи интервью мировой рекорд составляет 314 триллионов десятичных знаков, а на расчет этой последовательности ушло 110 дней [3:09:01]. Последняя известная человечеству цифра в этой цепочке на данный момент — 8, но Том уверен, что прогресс не остановится [3:09:13]. Подобные классификации показывают, что мир чисел гораздо богаче и сложнее, чем простая числовая прямая [3:09:40].

## 🏁 Завершение обзора: от вычисляемых чисел к теории множеств
[[JUMP:3:23:17]]

В финальной части обсуждения Том Кроуфорд и Дэвид Малан завершают формирование «карты» числового мира, переходя от базовых понятий к сложным классификациям, которые лежат на стыке чистой математики и компьютерных наук. Этот этап служит не только итогом первой большой темы курса, но и фундаментом для более строгого изучения структур данных и алгоритмов.

### Вещественные числа: заполнение пустот
[[JUMP:3:23:56]]

Завершая визуализацию числовых иерархий, Том Кроуфорд вводит понятие вещественных (реальных) чисел [3:23:56]. На демонстрационном столе эта категория представлена белой веревкой, которая охватывает абсолютно все остальные группы — и рациональные, и иррациональные числа [3:24:09]. 

Важным нюансом этой модели является отсутствие «свободного пространства» внутри белой границы. Том подчеркивает, что любая точка на числовой прямой обязана быть либо рациональной, либо иррациональной — третьего не дано [3:24:50]. Следовательно, граница множества вещественных чисел должна вплотную прилегать к границам рациональных и иррациональных групп [3:25:14]. Ранее в разговоре они уже касались базовых классификаций, но именно здесь становится очевидной полнота системы: любое число, которое можно представить как расстояние на прямой, является вещественным [3:25:28].

### Иерархия сложности: от геометрии до алгоритмов Тьюринга
[[JUMP:3:26:44]]

Хотя натуральные, целые, рациональные и иррациональные числа составляют костяк школьной программы, Том Кроуфорд расширяет обзор для студентов CS50, вводя более продвинутые классификации [3:26:19]:

*   **Построимые числа (Constructible numbers).** Эта категория уходит корнями в математику Древней Греции [3:26:44]. Число считается построимым, если с помощью циркуля и линейки (без делений) можно построить отрезок соответствующей длины [3:26:57]. Примером является квадратный корень из двух: его легко получить, проведя диагональ в квадрате со стороной единица [3:27:24]. Построимые числа занимают уникальную нишу, включая в себя все рациональные числа и часть иррациональных [3:27:36].
*   **Алгебраические числа (Algebraic numbers).** Это числа, которые могут быть корнями многочленов с целыми коэффициентами [3:27:51]. В эту группу входит, например, кубический корень из двух, являющийся решением уравнения $x^3 = 2$ [3:28:20]. Том отмечает исторический факт: античная задача об «удвоении куба» оказалась невыполнимой именно потому, что кубический корень из двух, будучи алгебраическим, не является построимым [3:28:33].
*   **Трансцендентные числа (Transcendental numbers).** Числа, которые не являются алгебраическими [3:29:01]. К ним относятся такие фундаментальные константы, как число $\pi$ (пи) [3:30:22].
*   **Вычисляемые числа (Computable numbers).** Это важнейшее связующее звено между математикой и Computer Science, предложенное британским математиком Аланом Тьюрингом в 1936 году [3:29:16]. По определению Тьюринга, число является вычисляемым, если существует конечный алгоритм, способный вычислить его с любой заданной точностью за конечное время [3:29:54].

Том приводит впечатляющий пример с числом $\pi$: несмотря на его иррациональность, оно абсолютно вычисляемо [3:30:22]. С помощью современных алгоритмов, таких как формула Чудновских, мировые рекорды вычисления $\pi$ достигли 314 триллионов знаков после запятой [3:30:35]. Любопытно, что на вычисление такого объема данных ушло 110 дней, а 314-триллионной цифрой оказалась «8» [3:30:48].

### Итоги первой главы и анонс теории множеств
[[JUMP:3:40:22]]

Подводя итог масштабному введению в мир чисел, Дэвид Малан и Том Кроуфорд резюмируют пройденный путь. В этой главе были подробно разобраны как минимум девять различных типов чисел [3:40:22]. Исследование началось с самых простых — натуральных чисел, используемых для счета, затем расширилось до целых чисел за счет отрицательных значений и пришло к рациональным числам (дробям) [3:40:37]. 

В ходе лекции преподаватели затронули следующие ключевые аспекты:

*   Свойства десятичных дробей, которые могут быть конечными или периодическими [3:40:49].
*   Способы определения рациональности или иррациональности числа на основе его десятичного представления [3:40:55].
*   Визуальные взаимосвязи между различными числовыми коллекциями, включая продвинутые категории вроде построимых и вычисляемых чисел [3:41:02].

Однако, как отмечает Том, для более глубокого понимания того, как эти группы взаимодействуют друг с другом, математикам недостаточно простого описания [3:41:16]. Необходим строгий формальный язык, который позволит описывать отношения включения, пересечения и объединения этих групп. Таким языком является теория множеств (Set Theory) [3:41:25]. Именно этой теме — операциям над множествами и их роли в логике программирования — будет посвящена следующая глава курса [3:41:36].