Книга: Вычислительное мышление: Метод решения сложных задач
Назад: Магия чтения мыслей
Дальше: Увидеть мир таким, какой он есть

Простая магия

Простые числа в математических фокусах
Давайте рассмотрим другой тип фокусов, основанных на сопоставлении с образцом, — тип, который работает всегда (всегда, всегда, всегда), потому что нам известны математические принципы, стоящие за его закономерностями. В математике как таковой крайне важна способность видеть и понимать закономерности, а потом превращать их в общие факты, которые называют теоремами, — здесь мы снова наблюдаем метод обобщения, относящийся к вычислительному мышлению (основы вычислительного мышления были почерпнуты в самых разных источниках). Математика хорошо сочетается с магией, и, как только математики и программисты находят закономерности, фокусники могут использовать их в магических трюках.
Предложите трем друзьям ввести произвольное число в калькуляторы (или мобильные телефоны, если в них есть калькулятор). Скажите, что вы в точности предскажете, на какие числа будет делиться выбранное произвольное число. В калькуляторе можно указать абсолютно любое трехзначное число. Это их выбор. Однако этот выбор нужно держать в тайне от вас.
Притворитесь, что угадываете их мысли, и скажите, что три цифры — это слишком просто. Чтобы усложнить задачу, нужно увеличить числа. Чтобы им было проще, а вам — сложнее, они должны еще раз ввести то же самое трехзначное число, и тогда у каждого получится шестизначное. Например, если изначально они ввели 345, их новым числом будет 345 345.
Вы напрягаете свои телепатические возможности и сразу же называете разные маленькие числа, на которые их личные шестизначные числа делятся без остатка. Вы ответственно заявляете, что, хотя совершенно не представляете, что за числа они ввели, у первого друга число точно делится на 7, у второго — на 11, а у третьего — на 13. Остатка не будет. Друзья выполняют деление на калькуляторе, проверяют результат и показывают, что вы правы. Как вы и предсказали, остатка нет.
В заключительной части фокуса вы говорите, что моментально вычислите шестизначное число, которое будет без остатка делиться на три маленьких числа, которые вы уже дали, — три «случайных» числа, полученных из других, которые в начале выбрали ваши друзья. Вы называете шестизначное число, и снова калькулятор показывает, что вычисления в уме оказались абсолютно верными.
Магические совпадения совершенно случайны?
Секрет в том, что три названных вами маленьких числа — это всегда 7, 11 и 13. В остальном фокус является алгоритмическим и работает сам — он основан на математическом факте. Если записать число из трех цифр и дописать к нему те же самые три цифры, то у нас получится тот же результат, что и при умножении этого трехзначного числа на 1001. Почему? Умножая число на 1000, нужно поставить в конце три ноля. Умножая на 1001, мы умножаем на 1000 и приписываем в конце изначальное трехзначное число вместо трех нолей.
Например, 345 345 — это 345 × 1001 (345 000 + 345). Маленькие числа, которые вы используете в предсказании, — 7, 11 и 13. Однако 7 × 11 × 13 = 1001. Это значит, что, когда вы таким образом дублируете число, например 345, вы умножаете его на эти три числа. То есть 345 345 = 345 × 1001 — это абсолютно то же самое, что 345 345 = 345 × 7 × 11 × 13. Отсюда следует, что полученное шестизначное число будет делиться без остатка на любой из этих множителей, а потом на два оставшихся.
Благодаря этому математическому факту фокус срабатывает всегда, если вы используете числа 7, 11 и 13. На них будут без остатка делиться любые шестизначные числа из повторяющегося сочетания трех цифр. В заключительной части фокуса, когда вы продемонстрируете ваши поразительные математические способности, просто нужно получить любое шестизначное число такого рода, например 765 765. Конечно, оно будет делиться на 7, 11 и 13. Это неизбежно благодаря все тому же математическому принципу. Таким образом, за фокусом стоит математика, но волшебным его делает ваше выступление.
Выявление закономерности в математике привело к созданию обобщенного правила (математической теоремы), которое используется как алгоритм — в нашем случае для фокуса, а в других ситуациях оно служит основой для программы или разработки аппаратной части. Например, аппаратные модули, выполняющие быстрое умножение, часто используют похожий трюк, основанный на похожей теореме. Числа, записанные двоичным кодом, можно быстро умножить на два, просто сдвинув влево, то есть поставив в конце 0. Фактически никакого умножения не требуется.
Простые множители
Числа 7, 11 и 13 — это простые числа. То есть они делятся только на 1 и на самих себя. Проверьте: ни одно из них не делится на 2, на 3, на 4 и так далее. Эти три числа называются простыми множителями для 1001. Простые множители положительного целого числа — это простые числа, на которые оно делится без остатка.
Древнегреческий математик Евклид открыл, что каждое целое число больше 1, которое не относится к простым числам, можно получить, перемножив простые числа. Более того, для каждого целого числа существует только один набор простых множителей — эта комбинация уникальна. Этот факт называется теоремой о разложении на простые множители или основной теоремой арифметики.
Отсюда следует, что для числа 1001 существуют определенные простые числа, на которых основан наш фокус, — и это единственное такое сочетание. В нашем случае это 7, 11 и 13.
Тестируем математические закономерности
Знание математических закономерностей, лежащих в основе фокуса, поможет нам понять, что будет, если условия изменятся. Например, сработает ли фокус для однозначного числа — например, 3 и, соответственно, 33? Ответ отрицательный. Чтобы удвоить однозначное число, его нужно умножить на 11, а не на 1001. Число 33 — это 11, умноженное на 3. Пока все хорошо, но 11 — это простое число, а значит, оно не делится ни на что, кроме 1 и 11. Больше простых множителей нет. Фокус работает только для 11 и 1, а это слишком очевидно, чтобы казаться волшебным.
Получится ли фокус с удвоенным двузначным числом, например 3434? Ответ снова будет отрицательным, потому что 3434 — это 34, умноженное на 101, а 101 — тоже простое число. Математические знания позволяют нам предсказать, какие закономерности сработают, а какие необходимо проверить.
Вы сделаете фокус еще более надежным, если попросите друга быстро прочитать число вслух и моментально назовете, на что оно делится. Если друг сделает ошибку и, например, скажет 123124, вы сразу же ее исправите, указав на последнюю 4, и все же дадите правильный ответ с быстротой молнии. Это уже будет сопоставление с образцом как часть алгоритма проверки. Вы знаете, что здесь должно быть, и проверяете соответствие. Некоторые программы в системах с особыми требованиями к безопасности осуществляют схожую проверку. Программисты включают в код утверждения, которые являются истинными в момент работы программы в этой точке. Если утверждение неожиданно оказывается ложным, можно запустить специальный код, чтобы разобраться с проблемой. Правильный ввод чисел играет большую роль, и, если люди вводят неверные числа, очень важно, чтобы программа не игнорировала их, но указывала на проблему и давала человеку возможность исправить ошибку (в отличие от нашего фокуса). Это лишь некоторые из многочисленных способов писать надежные программы, чтобы избежать катастроф.
Поиск по запаху: фокус с пахнущей картой
Вот еще один фокус, который кажется невозможным и при этом весьма увлекателен. Чтобы его показать, нужно найти исключение из известной вам математической закономерности, одновременно скрывая его от аудитории. Вы используете способность «находить карту по запаху человека, выбравшего ее». Очевидно, показывая этот фокус, нужно действовать очень тактично!
Попросите зрителя перетасовать карты в колоде. Так на них останется его запах. Потом заберите карты и скажите, что после первой тасовки на некоторых картах остается более сильный запах, чем на других. Вы быстро проходитесь по колоде, обнюхивая карты, и разделяете их на две примерно равные кучки. В одной оказываются карты с сильным запахом — вероятно, их больше касались во время тасовки. В другой — карты вообще без запаха. Вероятно, их пропустили во время тасовки.
Попросите зрителя произвольно выбрать и запомнить одну из карт в стопке с сильным запахом и не говорить вам. Потом зрителю нужно положить ее в стопку без запаха. Вы тасуете эту стопку, а потом снова нюхаете каждую карту. Только по запаху вы можете верно указать карту, которую зритель спрятал в стопке непахнущих карт.
Секретный алгоритм без запаха
Секрет фокуса — обеспечить неочевидную для других закономерность (в разнице между пахнущими и не пахнущими картами) и увидеть исключения из этой закономерности. Здесь для этого используются простые числа. Вы кладете все карты, соответствующие простым числам, в одну стопку, а остальные — в другую. Пусть в нашем случае туз имеет номер 1, валет — 11, дама — 12, а король — 13. Чтобы отделить простые числа, вы кладете 2, 3, 5, 7, валета и короля в одну стопку, а остальные карты — в другую. Поскольку 1 по определению не относится к простым числам, туз отправляется во вторую стопку. Конечно, запах здесь совершенно ни при чем. Вы учитываете достоинство карт и делите колоду по принципу, известному только вам.
Оставшаяся часть фокуса требует от вас всего лишь уверенности и способности увидеть исключение из простой закономерности — это будет несложное упражнение на сопоставление с образцом. Представьте, что в «пахнущей» стопке находятся карты, соответствующие составным числам. Тогда вам нужно искать карту с простым числом в перетасованной «непахнущей» стопке. Для вас она будет выделяться, как огромная блестящая иголка в стоге сена, в то время как зрители будут видеть просто стог.
Конечно, есть и другие шаблоны, чтобы определить разницу между стопками, — например, класть красные карты в одну, а черные — в другую или фигурные карты в одну, а фоски — в другую, однако это слишком очевидно. Такие шаблоны были бы понятны аудитории, и фокус не получился бы.
Назад: Магия чтения мыслей
Дальше: Увидеть мир таким, какой он есть