Грустная новость: британский специалист по науке о данных Ник Берри, автор блога DataGenetics, предназначенного для популяризации математики (одного из самых старых и популярных), покинул нас в начале октября 2022 в возрасте 55 лет, не сумев побороть рак.

Ник родился в Йоркшире, изучал авиационную технику в Саутгемптонском университете, потом переехал в Сиэтл, где работал специалистом по науке о данных на различные компании, включая Microsoft и Facebook. Блог DataGenetics он начал вести в 2009. Достаточно быстро проект набрал большое количество подписчиков: всё благодаря простому языку и интересным темам из области математики, физики и информатики.

Ник всегда мог найти интересную тему для обсуждения и доступно объяснить её, а также получал истинное удовольствие от этого процесса. Любил он и хорошие задачки-загадки. Сегодняшние задачки взяты из его блога.

1. Без нулей


Напишите, как можно получить 1 000 000, перемножив два числа, не содержащие нулей. Подсказка: 10 x 10 x 10 x 10 x 10 x 10 = 1 000 000.

Решение
15625 x 64

Поскольку 10 = 2 x 5, получается, что миллион — это 2 x 2 x 2 x 2 x 2 x 2 x 5 x 5 x 5 x 5 x 5 x 5. Ответ можно получить, определённым образом сгруппировав двойки и пятёрки. Группировать их нужно так, чтобы ни в одном из двух чисел не было нулей – а значит, ни одно из них не должно содержать среди множителей одновременно двойки и пятёрки.



2. Тайное число Люси


На вечеринке вы случайно подслушали разговор между Люси и её подружкой. Люси упомянула, что у неё есть тайное число, не превышающее 100. При этом его можно однозначно описать, ответив на четыре следующих вопроса:

1) Делится ли число на два?
2) Делится ли число на три?
3) Делится ли число на пять?
4) Делится ли число на семь?

Ответ она уже прошептала подруге на ушко. К сожалению, из-за шума на вечеринке вы уловили только ответ на один вопрос – «да». Однако один только этот ответ позволит вам определить её тайное число.

Решение
70

Поскольку у нас есть четыре вопроса, на каждый из которых ответ может быть «да» или «нет», мы имеем 16 вариантов ответов. Люси сказала, что её число можно однозначно описать, ответив на эти вопросы. Давайте посмотрим на те из возможных комбинаций, которые определяют одно-единственное число.

Начнём с комбинации нет, нет, нет, нет. Мы получим числа 11, 13, и несколько других – поэтому данная комбинация нам не подходит.

Теперь попробуем нет, нет, нет, да. Получаем 7, 49 и ещё парочку – вычёркиваем и её.

Пройдя все комбинации таким способом, мы получим только две, из которых следует единственное число.

Нет, нет, да, да даёт 35.
Да, нет, да, да даёт 70.

У нас получается два варианта, 35 и 70.

При этом ответы на второй, третий и четвёртый вопрос – делится ли число на 3, 5 и 7 – для обоих чисел одинаковые. Но по условию задачи, мы можем определить число, зная ответ только на один вопрос – получается, это должен быть первый вопрос, делится ли число на 2. И раз мы знаем, что ответ на этот вопрос – «да», получается, что секретное число Люси равно 70.



3. Эльфы-хулиганы


Я записал целые числа от 1 до 9999 включительно на огромной школьной доске. Каждое из чисел написано там только по разу.

Ночью к доске получила доступ банда эльфов-хулиганов. Каждый из них подходил к доске, стирал два случайных числа и писал вместо них одно число – разницей между этими числами (по модулю разницы, т.е. абсолютное значение). Описанный вандализм продолжался всю ночь, пока на доске в результате вакханалии не осталось только одно число.

Вернувшись к доске следующим утром, я обнаружил на ней единственное число. Было ли оно чётным или нечётным?

Решение
Число будет чётным.

Очевидно, оставшееся на доске число может быть только чётным или нечётным. В начале ночи на доске написано 9999 чисел. 5000 из них нечётные, 4999 – чётные.

Когда эльф выбирает пару чисел, на доске могут произойти изменения всего трёх видов. Он может выбрать два нечётных числа, два чётных или по одному числу каждого типа.

Если он выберет два нечётных числа, разница между ними всегда будет чётной. Тогда количество нечётных чисел на доске уменьшится на 2.

Если он выберет два чётных числа, разница между ними тоже будет чётной. Тогда количество нечётных чисел на доске не изменится.

Если он выберет чётное и нечётное число, разница между ними будет нечётной. Мы потеряем одно нечётное число, зато получим ещё одно. По итогу количество нечётных чисел останется тем же.

Получается, что количество нечётных чисел на доске после каждого акта вандализма либо не меняется, либо уменьшается на два.

Изначально на доске было 5000 нечётных чисел, что является чётным количеством. Если мы будем всегда уменьшать его на 2, то оно будет оставаться чётным, и в итоге дойдёт до нуля.

Следовательно, если на доске осталось одно число, оно должно быть чётным.

Комментарии (32)


  1. petropavel
    18.10.2022 23:17
    +6

    Последнюю можно проще сделать. Запустить вместо эльфов — гномов, которые пишут не разность двух чисел, а их сумму — чётность же от этого не меняется.

    А результат — очевидно, сумма всех чисел на доске, и она чётная.


    1. DeathKeeper
      19.10.2022 00:45
      +7

      Если аппелировать к "четность не меняется", то лучше уж перед эльфами запустить кракена - пусть вместо каждого числа запишет его же по модулю 2.

      С 5000 нулями и 4999 единицами несколько проще все смотрится :)


  1. sena
    19.10.2022 00:36
    +6

    Либо вторая задача некорректно сформулирована, либо ответ некорректно сформулирован - в условии не сказано, что удалось расслышать вопрос, напротив, сказано что "один только этот ответ позволит...". А если не удалось расслышать, на какой именно вопрос был дан ответ "да", то мы не можем считать что ответ был на первый вопрос. Если же сформулировать, как "вы услышали только лишь один вопрос и ответ на него был 'да'", тогда нормально.


    1. Akina
      19.10.2022 01:20
      +1

      Набору "нет, нет, да, да" в первой сотне соответствует только одно число 35.

      Набору "да, нет, да, да" соответствует только одно число 70.

      Чтобы правильный ответ был единственный, вроде бы нужно именно "К сожалению, из-за шума на вечеринке вы уловили только ответ на первый вопрос – «да»." И тогда этот ответ - 70. Но это не так. Последняя фраза "Однако один только этот ответ позволит вам определить её тайное число." - это не просто сообщение, а часть условия. То есть это утверждение, что Вы можете определить число. А это возможно лишь в случае, если услышан ответ на именно первый вопрос.


      1. sena
        19.10.2022 01:53

        В формулировке содержится ложное утверждение. Там говорится, что "один только этот ответ позволит определить её тайное число", но это ложное утверждение. Одного этого ответа недостаточно, потому что в описанных обстоятельствах - вы сидели с двумя девушками, услышали условия изложенные девушкой и потом её единственный ответ на неизвестный(!) вопрос, дать ответ невозможно, потому что надо ещё знать, на какой вопрос он был дан!

        Нет, речь идёт именно о некорректной формулировке, а не о недостаточности данных.

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

        Другой корректный вариант - "девушка заметила что я услышал единственный ответ 'да' и добавила, что того ответа, что я услышал, мне будет достаточно". Тогда условие добавляется в описанные обстоятельства и воспринимается как условие задачи.


        1. Akina
          19.10.2022 12:21

          В формулировке содержится ложное утверждение. Там говорится, что "один только этот ответ позволит определить её тайное число", но это ложное утверждение.

          Это не так. Эта формулировка существует не самостоятельно, а в комплексе с остальными.

          Собственно, в задаче есть два связанных между собой факта:

          Факт первый - есть утверждение, что загаданное число "можно однозначно описать, ответив на четыре следующих вопроса". Мы уже пришли к выводу, что такой формулировке при известных ответах на все 4 вопроса соответствуют числа 35 и 70.

          Факт второй - есть утверждение, что "один только этот ответ позволит вам определить её тайное число".

          Теперь давайте определим вот что: ответ на какой из 4 вопросов делает второе утверждение, второй факт, истинным?

          Очевидно, что "да" в принципе не может быть ответом на вопрос 2 - в обоих вариантах там должно быть "нет".

          Также это не может быть ответом на вопрос 3 или 4 - оба варианта содержат там "да", и мы по-прежнему не можем однозначно определить число и сделать второй факт истинным.

          Остаётся единственный вариант - это ответ на вопрос 1. И соответственно загаданное число - 70.


          1. ss-nopol
            20.10.2022 16:17

            Факт второй - есть утверждение, что "один только этот ответ позволит вам определить её тайное число".

            Какому "мне" известен этот второй факт? Тому что сидит с девушками или тому что читает Хабр? Тому "мне", что сидит с девушками этот факт неизвестен, потому что девушка его не сказала!


            1. Akina
              20.10.2022 18:50

              Какому "мне" известен этот второй факт?

              Тому, который пытается решить эту задачу.


              1. ss-nopol
                21.10.2022 11:02

                Согласно условию задачу пытается решить тот, кто сидит с девушками. Он не читает хабр и ему неизвестен этот дополнительный второй факт.


      1. Megakazbek
        19.10.2022 02:37
        +4

        Всё, что известно подслушивающему - это ответ "да" на какой-то вопрос, а это могло случится и в случае 70 и в случае 35. Тут единственного правильного ответа в принципе быть не может (и не поможет даже фраза в условии), т.к. ответ "да" не разделяет эти ситуации, для этого нужно дополнительно знать, что услышан ответ именно на вопрос, которым ситуации отличаются.


        1. sena
          19.10.2022 03:48
          +1

          Да, точно, то есть только вторая формулировка в моём ответе, первой будет недостаточно. Девушка должна дать подсказку, что услышанного достаточно.


  1. alexdoublesmile
    19.10.2022 04:04

    Прикольные задачки) Только они скорее арифметические, математика по большей части не имеет ничего общего с числами


    1. MobCobra
      19.10.2022 08:02
      +3

      Специалисты по теории чисел смотрят на вас с недоумением.


  1. Aleksandr-JS-Developer
    19.10.2022 12:02

    1. Без нулей

    Ага, это легко, а вот для найдёте ли вы решение при N = 1000002?


    1. Ocelot
      19.10.2022 12:19

      Это ещё легче
      333334*3


      1. Aleksandr-JS-Developer
        19.10.2022 12:23

        А при N = 1000019 ?

        Кстати, интересно, что для каждой степени 10 есть только одно решение и оно равно:
        N1 = (5)^p, N2 = (2)^p , где p - это степень, в которую нужно возвести 10, чтобы получить N.


        1. Ocelot
          19.10.2022 12:26

          Spoiler header
          47*21277


          1. Aleksandr-JS-Developer
            19.10.2022 12:41

            Вы уже написали программу или ещё считаете так?)


            1. Ocelot
              19.10.2022 12:44

              Что там писать? factor (N);


              1. Aleksandr-JS-Developer
                19.10.2022 12:55

                Ну, например, для подсчёта случаев N = 10^500)

                Ответ N = 10^500

                Просто оставлю это тут)

                30549363634996046820519793932136176997894027405723266638936139092812916265247204577018572351080152282568751526935904671553178534278042839697351331142009178896307244205337728522220355888195318837008165086679301794879136633899370525163649789227021200352450820912190874482021196014946372110934030798550767828365183620409339937395998276770114898681640625 * 3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376


                1. domix32
                  19.10.2022 14:39

                  ну так для степеней десятки сложность никак не растет. как было 2^n x 5^n = 10^n так и осталось. Или вы хотите числа длиной 100+ символов ручками перепроверять? Помню хотел вручную посчитать сколько же риса там на шахматную доску попадет. После два в сорок какой-то у меня кончилась тетрадь на расчет слагаемых и я забросил это дело.


                  1. Aleksandr-JS-Developer
                    21.10.2022 13:16

                    2 ^ 64 - 1 = 18446744073709551615 зёрнышек.

                    Считали бы долго)))


                    1. domix32
                      21.10.2022 13:34

                      Да я уже будучи студентом вспомнил эту задачку и в экселе за пару кликов вывел.


                      1. Aleksandr-JS-Developer
                        21.10.2022 14:56

                        ну так для степеней десятки сложность никак не растет. как было 2^n x 5^n = 10^n так и осталось

                        Приводил пример зачем может потребоваться программа :)

                        А оказалось, что для N = 10^500 решения, походу, нет)


                1. Akina
                  19.10.2022 19:17

                  Не пойдёть - задание требует, чтобы ни в одном из чисел не было ни одного нуля. Не в конце, а вообще.


                  1. Aleksandr-JS-Developer
                    21.10.2022 12:03

                    Мой косяк. Задания я понимал, но просто слепо доверял этой самой программе, а при копировании нули не заметил

                    Короче, формула работала для случаев, когда N <= 10 ^ 9.
                    Т. к. 2 ^ 10 = 1024...

                    Прикинул, что формула справедлива для случаев, когда

                    N = 10 ^ p, p ∈ {1 2 3 4 5 6 7 9 18 33}

                    Хотя для N > 10*10000не проверял... уж лень 10 мин ждать пока этот медленный JS умножит несколько чисел.

                    Получается, что для некоторых N нет решения. Полный перебор множителей для N = 10 ^ 10 ожидаемо не дал результата без нулей.

                    Конечно, это если мы говорим про целые числа, хотя в задаче не было этого ограничения...


                1. Asaphalandor
                  20.10.2022 01:10

                  Но тут же есть нули.


                  1. Aleksandr-JS-Developer
                    21.10.2022 13:01

                    Ага, см. коммент выше)


  1. DoNotPanic
    19.10.2022 17:26
    +1

    как можно получить 1 000 000, перемножив два числа, не содержащие нулей

    3E8_16 * 3E8_16 выглядит легальным решением… Числа в другой системе счисления — тоже числа, и нулей в данном случае нет )
    К сожалению, из-за шума на вечеринке вы уловили только ответ на один вопрос – «да».

    Там есть нюанс, который плохо понятен из оригинала, а в русском языке ещё сложнее стало понять… Фишка в том, что тот, кто услышал ответ на вопрос, знает номер вопроса. Номер вопроса просто не сказали читателю, но он однозначен, это не просто информация о том, что у нас среди ответов есть минимум одно «да» (при прочтении впечатление именно такое, но эта информация мусорная, очевидно что загадано не простое число).
    Поддерживаю sena, хорошо бы переформулировать.


  1. 18741878
    20.10.2022 12:17

    Простое наблюдение к задаче "Без нулей":

    10=2*5

    100=4*25

    1000=8*125

    ...

    1000000=64*15625

    Видите закономерность? Проверка:

    10000000=128*78125


    1. Ocelot
      20.10.2022 18:29

      На 10^8 всё ломается:
      100000000=256*390625


      1. 18741878
        21.10.2022 11:08

        Это точно. Правда, я не утверждал, что закономерность соблюдается будет соблюдаться всегда :)