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



Возьмите любое число. Если оно чётное, поделите его на два. Если нечётное, умножьте на три, прибавьте один. Повторите. Любое ли число в итоге приходит к 1?

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

Гипотеза Коллатца, возможно, простейшая из нерешённых задач математики – именно это и делает её такой предательски притягательной.

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

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

8 сентября 2019 Теренс Тао опубликовал доказательство, где показано, что гипотеза Коллатца, по меньшей мере, «почти» верна «почти» для всех чисел. И хотя результат Тао не является полным доказательством гипотезы, это очень серьёзный прорыв для задачи, не так-то легко раскрывающей все свои секреты.

«Я не ожидал решить задачу полностью, — сказал Тао, математик из Калифорнийского университета в Лос-Анджелесе. – Но у меня получилось сделать больше, чем я ожидал».

Головоломка Коллатца


Лотар Коллатц, вероятно, высказал одноимённую гипотезу в 1930-х годах. Задача звучит, как фокус для вечеринок. Возьмите любое число. Если оно чётное, поделите его на два. Если нечётное, умножьте на три, прибавьте один. Получится новое число. Примените те же правила для него. Гипотеза говорит о том, что произойдёт, если настойчиво повторять этот процесс.

Интуиция подсказывает, что начальный номер влияет на конечный результат. Возможно, некоторые числа в итоге будут уменьшаться до 1. Возможно, другие числа будут увеличиваться до бесконечности.

Однако Коллатц предсказал, что это не так. Он предположил, что если вы начнёте с положительного целого числа, и достаточно долго будете повторять указанную последовательность, то с любого начального числа придёте к 1. А придя к единице, правила гипотезы поймают вас в бесконечную петлю: 1, 4, 2, 1, 4, 2, 1, и так далее, до бесконечности.

С годами многих любителей задач притягивала привлекательная простота гипотезы Коллатца, или «задачи 3х+1», как её ещё называют. Математики проверили уже квинтиллион примеров (это число с 18 нулями), не найдя ни единого исключения из предсказания Коллатца. Вы и сами можете попытаться проверить несколько примеров с любым из множества имеющихся в интернете "калькуляторов Коллатца". В интернете полно необоснованных любительских доказательств гипотезы, авторы которых утверждают, что им удалось её доказать или опровергнуть.



«Вам нужно только уметь умножать на 3 и делить на 2, и вы уже можете начать играться с ней. И это очень заманчиво», — сказал Марк Чамберленд, математик из Колледжа Гриннела, записавший популярное на YouTube видео об этой задаче под названием «Простейшая из невозможных задач».


А вот истинных доказательств немного.

В 1970-х математики показали, что почти все последовательности Коллатца – список чисел, которые вы получаете при повторении процесса – в итоге приходят к числу меньшему, чем начальное. Это было слабое свидетельство того, что почти все последовательности Коллатца приводят к 1, но тем не менее, оно было. И с 1994 года до полученного в 2019 году результата Тао, рекорд по демонстрации минимального значения удерживал Иван Корец. Другие работы сходным образом пытались атаковать задачу, не приближаясь к её главной цели.

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

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

«Задача Коллатца известна своей сложностью – настолько, что математики обычно предваряют каждое её обсуждение предупреждением не тратить на неё время», — сказал Джошуа Купер из университета Южной Каролины.

Неожиданный совет


Впервые Лагариас заинтересовался этой гипотезой, будучи студентом, не менее 40 лет назад. Десятилетиями он был неофициальным куратором всего, что с ней связано. Он набрал целую библиотеку связанных с нею работ, и в 2010 опубликовал некоторые из них в виде книги под названием: "Решающий вызов: задача 3х +1".

«Теперь я гораздо больше знаю об этой задаче, и всё равно могу сказать, что решить её невозможно», — сказал Лагариас.

Обычно Тао не тратит своё время на невозможные задачи. В 2006 году он получил Филдсовскую премию, высшую награду по математике, и считается одним из лучших математиков своего поколения. Он привык решать задачи, а не гоняться за воздушными замками.

«Это риски, связанные с профессией математика, — сказал он. – Можно стать одержимым одной из больших известных задач, находящихся за пределами возможностей любого человека, и потерять кучу времени».

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

Затем в августе анонимный читатель оставил в блоге Тао комментарий. Он предложил попробовать решить гипотезу Коллатца «почти для всех» чисел, не пытаясь полностью доказать её.

«Я не ответил, однако это заставило меня снова задуматься об этой задаче», — сказал Тао.

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

Входы и выходы


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

Казалось бы, у сложных ДУЧП есть мало что общего с таким простым арифметическим вопросом, как гипотеза Коллатца.

Но Тао понял, что у них есть нечто общее. В ДУЧП можно подставить значения, получить другие значения, повторить процесс – и всё это для понимания будущего состояния системы. Для каждого заданного ДУЧП математикам нужно знать, приведут ли начальные значения на входе к бесконечным значениям на выходе, или же уравнения всегда будут выдавать конечные значения, вне зависимости от начальных.


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

Для Тао эта цель была того же порядка, как и то, всегда ли вы получите одно и то же значение (1) из процесса Коллатца, вне зависимости от начального значения. В результате он понял, что техники изучения ДУЧП могут подойти для изучения гипотезы Коллатца.

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

В контексте гипотезы Коллатца представим, что мы начали с большой выборки чисел. Наша цель – изучить, как эти числа ведут себя, когда мы применяем к ним процесс Коллатца. Если почти 100% чисел в выборке приходят к 1 или очень близко к 1, можно заключить, что почти все числа будут вести себя так же.

Но чтобы это заключение было обоснованным, нужно очень тщательно составить выборку. Эта задача похожа на составление выборки участников голосования на выборах президента США. Для тщательного составления выборки из всей популяции нужно использовать взвешенные пропорции для республиканцев и демократов, мужчин и женщин, и так далее.

У чисел есть собственные «демографические» параметры. Нечётные и чётные числа, числа, делящиеся на 3, и числа, отличающиеся друг от друга ещё более хитрыми способами. Создав выборку чисел, можно сделать так, чтобы в неё входили определённые тип чисел, и не входили другие, по взвешенному принципу – и чем лучше вы выберете веса, тем точнее будут ваши умозаключения по поводу всех чисел в целом.

Взвешенный выбор


Задача Тао была гораздо сложнее, чем просто понять, как нужно создавать изначальную выборку чисел с нужными весами. На каждом шагу процесса Коллатца числа, с которыми вы работаете, меняются. Одно очевидное изменение состоит в том, что почти все числа из выборки уменьшаются.

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

«Обычно можно ожидать, что распределение после итерации будет полностью отличаться от начального», — сказал Тао. Однако ключевой его идеей было то, как можно создать выборку чисел, по большей части сохраняющих свои оригинальные веса в процессе Коллатца.

К примеру, начальная выборка Тао взвешена так, чтобы в ней не было чисел, делящихся на три, поскольку процесс Коллатца всё равно довольно быстро устраняет такие числа. Некоторые другие веса, выбранные Тао, оказываются сложнее. Он отдаёт предпочтение числам, остаток которых от деления на 3 составляет 1, и отходит от чисел, остаток которых от деления на 3 составляет 2.

В итоге выборка, с которой начинает Тао, сохраняет свой характер даже после начала процесса Коллатца.

«Он обнаружил способ продолжить этот процесс так, чтобы после нескольких шагов всё ещё было понятно, что происходит, — сказал Саундарараджан. – Когда я впервые увидел эту работу, я очень обрадовался и решил, что она потрясающая».

Тао использовал свою технику назначения весов, чтобы доказать, что почти все начальные значения – не менее 99% — в итоге приходят к величине, очень близкой к 1. Это позволило ему сделать вывод о том, Что 99% начальных значений, больших, чем квадриллион, в итоге приходят к величинам, меньшим 200.

Это, возможно, самый сильный результат в долгой истории этой гипотезы.

«Это великолепный прорыв в наших знаниях о том, что происходит с этой задачей, — сказал Лагариас. – Это определённо лучший результат за очень долгое время».

Метод Тао почти наверняка не способен добраться до полного доказательства гипотезы Коллатца. Причина в том, что его начальная выборка всё же немного искажается после каждого шага. Искажение будет минимальным, пока в выборке всё ещё содержатся множество разных значений, далёких от 1. Но в процессе Коллатца все числа в выборке начинают стремиться к одному, и небольшое искажение становится всё больше – так же, как небольшая ошибка в подсчётах результата голосования не имеет большого значения в случае крупной выборки, но сильно влияет на результат, когда выборка мала.

Любое доказательство полной гипотезы, скорее всего, будет основано на другом подходе. В итоге, работа Тао одновременно является и триумфом, и предостережением всем интересующимся: как только вам кажется, что вы загнали задачу в угол, она ускользает.

«К гипотезе Коллатца можно подобраться сколь угодно близко, но она всё равно остаётся недостижимой», — сказал Тао.

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


  1. MaxxONE
    07.01.2020 10:44
    +62

    Каждый день он тратит один-два дня на самые известные из нерешённых задач по математике.

    Впечатляюще!


    1. virtualtoy
      07.01.2020 11:01
      +33

      Ну он же математик, ему можно


    1. igninus
      07.01.2020 11:04
      +12

      Чак Норрис от мира математики.


    1. Stas911
      07.01.2020 17:52
      +10

      И он неплохо выглядит в свои 85


      1. lain8dono
        07.01.2020 21:37
        +10

        Особенно для человека, родившегося в 1975 году.


      1. gozhiy
        07.01.2020 23:44
        +1

        Википедия говорит о дате рождения 17 июля 1975 года. Т.е. ему 44 года.


        1. iago
          08.01.2020 11:01

          Впервые Лагариас заинтересовался этой гипотезой, будучи студентом, не менее 40 лет назад.

          я конечно понимаю, что он гений, но в 4 года быть студентом… я только читать научился


          1. antonkrechetov
            08.01.2020 11:22

            В треде выше речь идет о Теренсе Тао, авторе доказательства, а не о Джефри Лагариасе.


          1. gozhiy
            08.01.2020 11:22

            я конечно понимаю, что он гений, но в 4 года быть студентом… я только читать научился

            Мы говорим о разных людях. Это Теренс Тао 1975 года. А Джеффри Легариас — 1949-го.


    1. MaxVetrov
      07.01.2020 18:48
      +4

      Это он, уже должно быть, в физику пространства и времени залез.


      1. v1000
        08.01.2020 10:48

        Doctor Strange?


        1. MaxVetrov
          08.01.2020 12:23

          Доктор Кто?


          1. ivan386
            08.01.2020 12:34

            Гугл перовочик говорит что: "Доктор странный".


            1. MaxVetrov
              08.01.2020 13:32

            1. Darth_Biomech
              09.01.2020 06:00

              Возможно. Но кто мы такие чтобы судить?


    1. Chosen_One
      08.01.2020 06:05
      +3

      Один день тратит, два в уме :)


      1. eugenius_nsk
        09.01.2020 15:00

        Один день реальный, два мнимых


  1. rsashka
    07.01.2020 11:03

    Особенно порадовало, что

    Опытные математики советуют новичкам держаться подальше от гипотезы Коллатца.
    А так как мы не опытные, да и не математики вовсе, то сейчас попробую накидать статью с потенциальным доказательством.

    Но даже если я и ошибаюсь, все равно спасибо автору за утреннюю гимнастику для ума!
    Очень интересная задачка.


    1. Firsto
      07.01.2020 15:30

      попробую накидать статью с потенциальным доказательством.
      Вы всё равно делитесь результатами, даже если они не стоят отдельной публикации.)


    1. tonad
      08.01.2020 19:09
      -1

      По идее можно попробовать доказать что последовательность приводит к одной из степеней двойки. Понятия не имею только как это делается. Наверное это и есть первая ловушка в задаче…


  1. ideological
    07.01.2020 11:47
    -23

    Никогда не понимал одержимости математическими доказательствами и профита от них.


    Вот в данном случае можно было написать скрипт на языке программирования и проверить на практике. Но математиков это не устроит, так как доказательства должны быть по местным понятиям.


    1. mokhin-denis
      07.01.2020 12:23
      +15

      А просто скрипт докажет (или опровергнет) гипотезу лишь на некотором конечном множестве, в частном случае. Это подходит там, где это множество конечно или можно от частного перейти к общему. В данном случае мы имеем дело с бесконечным множеством.


      1. chapuza
        07.01.2020 18:14
        +7

        докажет (или опровергнет) гипотезу лишь на некотором конечном множестве

        Эм… Для опровержения достаточно множества мощности 1 :)


        1. ProLimit
          09.01.2020 11:21

          сорри, ошибся стрелочкой, хотел плюс поставить. Но отсутствие опровержения вполне очевидно — тогда бы эту задачу давно вычеркнули из списка нерешенных. И также можно предположить, что начало множества уже все перебрали, насколько позволяет современная вычислительная техник, так что «попробовать скриптом» не прокатит.


      1. ideological
        08.01.2020 00:40
        -3

        Ну а разве математики доказывают не путём индукции? Типа справедливо для x, x+1, x+2… то справедливо и для остальных целых чисел.


        1. Fenzales
          08.01.2020 00:54
          +3

          Типа справедливо для x, x+1, x+2… то справедливо и для остальных целых чисел.
          Это не метод индукции, это не пойми что :) Нельзя просто взять конечный числовой ряд и назвать его доказательством.


          1. ideological
            08.01.2020 09:59

            Ну как тут все уже поняли — я не математик.


            Вот кстати на Хабре явно не хватает статьи с методами доказательств на простых примерах. И вообще, ИМХО математика нуждается в популязаторстве.


            Конечно я понимаю что это невозможно, нет царских путей и всё такое :)


            1. iago
              08.01.2020 11:06

              Обычно это проходят на первом курсе любого технического ВУЗа, но если вы хотите понятным языком самые основы вышки — могу порекомендовать Дмитрия Письменного, он простым понятным языком изложил стандартный курс любого инженерного ВУЗа


              1. forever_live
                08.01.2020 19:57
                +2

                А разве не в школе?


                1. iago
                  09.01.2020 16:03

                  я уже не помню, давно это было :) но на 1 курсе это точно повторялось. Да, вы правы, в школе, как минимум в геометрии точно было четко расписано, что значит доказать теорему и что — опровергнуть доказательство например. А это 7 класс!


          1. greatmelon
            08.01.2020 22:22
            +1

            как бы это математическая индукция и есть. Докажите верность x(n+1) при условии что для xn утверждение гипотезы верно и будет вам всеобщее признание.


            1. mayorovp
              08.01.2020 23:07

              Вот только в комментарии выше писалось при индукцию обычную.


        1. mayorovp
          08.01.2020 10:08
          +2

          Гипотеза: все нечетные числа — простые. Доказывает физик:


          3 — простое, 5 — простое, 7 — простое, 9 -ошибка эксперимента, 11 — простое, 13 — простое...


          Это так что ли вы предлагаете делать? Нет, математики так никогда не делают.


          1. ProLimit
            09.01.2020 11:41

            Но если задача слишком сложная, а решить очень хочется — то делают :) Вот данная статья — пример. 1% оставили недоказанным. Если бы она имела практическое значение — это все еще много. Так что в чем смысл и радость от такого «физческого» доказательства, не очень понятно.


            1. mayorovp
              09.01.2020 11:43

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


              Во-вторых, всё равно никто не делает финального заключения "то справедливо и для остальных целых чисел".


              1. ProLimit
                09.01.2020 11:58

                Конечно, разница с вашим примером огромная, но и это доказательство «верно для 99% чисел» противоречит духу чистой математики и больше подходит физикам, о чем я и написал.


    1. ganqqwerty
      07.01.2020 13:24
      +14

      Доказательство доказывает утверждение для абсолютно всех чисел — хоть для числа 5, хоть для сиксилиарда пипсиллионов. А скрипт — нет.


      1. Goodkat
        07.01.2020 16:37
        +8

        Скрипт тоже, но не сразу — просто подождите пупсилион лет.


        1. red75prim
          07.01.2020 17:51
          +5

          Это для конкретного большого числа. А для всех чисел — никогда, или, что то же самое, через бесконечное количество времени.


          1. fshp
            09.01.2020 02:49

            Достаточно на каждое следующее число тратить в 2 раза меньше времени на проверку. Тогда получим сходщийся ряд и проверим бесконечное множество за конечное время. Делов то.


            1. red75prim
              09.01.2020 07:11

              Ага. Так даже можно посчитать сумму ряда 1, -1, 1, -1, 1, -1,…


              1. trapwalker
                09.01.2020 11:40
                -1

                Это же элементарно=)
                Складываем все единицы с минус единицами и получаем ноль.


                1. red75prim
                  09.01.2020 12:07

                  Или переупорядочиваем 1, 1, -1, 1, 1, -1, 1, 1, -1,… складываем по 3 и получаем плюс бесконечность в пределе.


                  Впрочем, это я так — для разминки мозгов. Что получилось бы, если бы гипервычисления были реальностью.


                  1. fshp
                    09.01.2020 12:12

                    Вы не можете переупорядочить элементы. Это уже другой ряд будет.


                    1. tmteam
                      09.01.2020 14:33
                      -1

                      При перемене мест слагаемых — сумма не меняется


                      1. fshp
                        09.01.2020 14:43

                        Это справедливо лишь для абсолютно сходящихся рядов, коим ряд Гранди не является.


                      1. trapwalker
                        10.01.2020 10:25

                        А там не просто перестановка, там именно что предпочтение одних членов последовательности другим. А лишние "-1" вообще " в конец" бесконечного ряда отправлены подождать своей очереди?


                        1. red75prim
                          10.01.2020 10:32

                          Лишние? Мощности множеств единиц и минус единиц в обоих рядах одинаковы и равны алеф-ноль.


                          Там дело в том, что если определить сумму бесконечного ряда, как предельный переход, то у ряда Гранди никакой суммы не будет. И с таким определением суммы бесконечного ряда ряд уже нельзя рассматривать просто как множество чисел.


                          Поэтому — да, переупорядочивание, которое я использовал, не обязано давать ту же сумму. Но не потому, что там другое количество единиц и минус единиц. Это действительно просто перестановка.


                          1. trapwalker
                            10.01.2020 14:55
                            -1

                            Да не сердитесь, я ж пошутил=) Коммутативный вы шовинист.


                1. fshp
                  09.01.2020 12:14

                  Только по Чезаро сумма этого ряда равна 0.5.


                  1. trapwalker
                    09.01.2020 12:51

                    Ну по Чезаро и сумма натуральных чисел = -1/12.
                    Вопрос-то стоял не в том, как ещё можно посчитать, а в том, чтобы вообще посчитать как-нибудь. Ведь на самом деле тут нет никакого «на самом деле».


      1. Stas911
        07.01.2020 19:03
        +2

        Зато может опровергнуть его и дело с концом


        1. AllexIn
          07.01.2020 20:21
          +4

          Пока не опроверг.


        1. snizovtsev
          07.01.2020 23:01
          +7

          Не с концом, а сразу появится десяток новых вопросов:


          • А есть ещё?
          • Если это конечный цикл, то есть ли без цикла (и наоборот)?
          • Оценка числа таких чисел в промежутке;
          • Алгоритмическая сложность получения последовательности таких чисел (если бесконечно);
          • А в условии брать не четность, а другие модули;


          1. trapwalker
            09.01.2020 11:42

            Мне кажется если про эту задачу по телеку скажут, то её даже запретить попытаются.
            UPD.
            Шутки шутками, а прикольно было бы жить в мире, где правительство попыталось бы законодательно запретить какую-то математическую задачу.


            1. unC0Rr
              09.01.2020 12:38

              Уже есть схожий феномен "незаконных чисел".


      1. ideological
        08.01.2020 01:42
        -4

        Это доказательство нужно даже если всё очевидно?


        Скрипт докажет до определённого целого числа и этого может быть достаточно.


        1. Murmurianez
          08.01.2020 08:34

          А может и не быть — хрен его знает к чему потом эту теорему решат применить. От того что там в бесконечности может зависеть смысл жизни — вдруг 41 окажется после ваших скриптов? И что тогда делать?


          1. MadBambula
            08.01.2020 15:10
            +1

            42


            1. Murmurianez
              09.01.2020 00:58

              Так это если правильно посчитать, а не как предыдущий оратор предлагает


              1. mayorovp
                09.01.2020 06:24

                Это был ответ на вопрос "и что тогда делать?"


        1. mayorovp
          08.01.2020 10:10

          Если всё очевидно — значит, и доказательство придумать несложно. Так в чём проблема-то?


          1. ideological
            08.01.2020 11:12

            Ну потому что доказать нужно специфичным образом.


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


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


            1. tundrawolf_kiba
              08.01.2020 13:42

              Ну с фундаментальными науками — никогда не знаешь когда и что выстрелит, как то же электричество, открыли, а потом около 200 лет не знали нафига оно может пригодиться(ну разве что фокусы в цирке показывать). Так и тут — доказательство очередной математической теории может к примеру потребовать создания и исследования нового раздела математики, этот раздел лет через 50 к примеру придумают как применить для того, чтобы рассчитать и понять, что происходит в сингулярности черной дыры, и еще лет через 50 — варп-двигатели клепать не будет только ленивый.


            1. mayorovp
              08.01.2020 14:49
              +1

              Ну так конкретно для сферы, квадрата (т.е. куба?) и бублика это можно и без гипотезы Пуанкаре доказать.


              Гипотеза Пуанкаре вам понадобится в тот момент, когда у вас окажется такое странное многообразие, для которого трансформация в сферу будет неочевидной.


        1. lany
          08.01.2020 10:41

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


        1. bogolt
          08.01.2020 22:08

          Скрипт увы никак не может.
          Доказать нельзя потому что проверить все числа невозможно.
          Опровергнуть тоже нельзя — потому что для опровержения даже для одного числа нужно выполнить бесконечное число операций.
          Предположим вы нашли число 5**9999 и за первый миллион операций оно не пришло к 1. Может ли скрипт понять что оно никогда к нему не придет?


          1. mafia8
            08.01.2020 23:34

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


          1. Mad__Max
            09.01.2020 21:49

            Кроме расходящейся бесконечности возможно попадание в замкнутый конечный цикл. И его обнаружить легко.


            1. bogolt
              09.01.2020 21:56

              легко если хватит памяти чтобы запомнить все элементы последовательности. А если нет?


              1. ZuOverture
                10.01.2020 00:30

                Только начальный, для сравнения с очередным сгенерированным. Остальные-то зачем хранить при наличии однозначных правил генерации?


                1. bogolt
                  10.01.2020 00:53

                  зациклиться же можно в любой момент и не дойдя до начального числа. Как узнаем об этом не храня их все?


                  1. Mad__Max
                    10.01.2020 01:07

                    Узнаем когда дойдем при проверке уже до числа с которого начинается этот цикл. Это в худшем случае — если промежуточные значения вообще не храним и сравниваем только с начальным.


                  1. ZuOverture
                    10.01.2020 17:44

                    Насколько я понял, есть хорошая аппроксимация числа шагов до схождения от величины исходного числа. Если проверяемое число сходится существенно дольше ожидаемого, то можно для него отдельно запускать проверку на попадание в цикл с хранением промежуточных. Ниже был вариант как это сделать хоть и за большое время (но не более удвоенной длины цикла), зато с хранением всего лишь двух значений. В крайнем случае (бесконечное расхождение) этот метод позволяет наложить ограничение снизу на длину цикла.


              1. Mad__Max
                10.01.2020 01:27

                Нехватка памяти проблемой быть не должна. Может быть проблема с переполнением разрядности переменных используемых для рассчета — это относится к случаю доказательства (невозможности) ухода ряда на бесконечность чисто численными методами.

                На практике ряд либо получится убывающим и сводящимся к единице — как все проверенные до сих пор.
                Либо возрастающим и стремящимся к бесконечности — тут проблемой станет быстрое переполнение (слишком большие числа)
                Либо неубывающим и не возрастающим, а петляющим в диапазоне чисел не намного выше исходного числа, но тогда должен достаточно быстро попасть на повтор одного из чисел в последовательности и тем самым уход в замкнутый цикл.

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

                И обнаружение любого числа выбивающегося из этого правила само по себе станет открытием. Было бы интересно получить число из которого простой формулой (как в этой гипотезе) можно получить ряд в миллионы неповторяющихся псевдослучайных чисел при этом без выраженой тенденции к их росту.


    1. khim
      07.01.2020 17:03
      +5

      Если бы вы удосужились прочитать-таки статью, то выяснили бы, что гипотеза проверена для всех «малых» чисел — до квинтиллионов. То есть скрипт-то давно накидали… Вот только он всё равно для всех чисел ничего доказать не сможет…


      1. stalinets
        07.01.2020 21:35

        Помню, лет 9-10 назад несколько месяцев участвовал в распределённых вычислениях, считая видеокартой именно гипотезу Коллатца. А потом появился биткоин, и задача у видеокарты поменялась.


        1. AlexNoo
          09.01.2020 00:09

          А разбогатеть удалось?


          1. stalinets
            09.01.2020 18:47
            +1

            Да, продал битки и купил себе велосипед и дозиметр)) Правда, если бы продал попозже, купил бы квартиру, но это уже другая история)


    1. Crazybunter
      07.01.2020 23:43

      Щас бы счетное множество в компьютер засунуть


  1. beduin747
    07.01.2020 12:31
    +2

    Наркота для математиков? =)


    1. Biga
      08.01.2020 00:08
      +4

      У нас было три построения теории вещественных чисел, 75 пределов последовательностей, два определения предела функции по Коши и по Гейне, комплексные числа, О-символика, наполненная эквивалентными функциями, и целое море различных непрерывностей и равномерностей всех сортов и расцветок, а также запись лекций Теляковского, производные, точки разрыва первого и второго рода и задачник Демидовича. Не то, чтобы это был необходимый запас для подготовки, но раз уж начал готовиться к коллоквиуму, становится трудно остановиться. Единственное, что вызывало у меня опасение — это производные. Ничто в мире не бывает более беспомощным, безответственным и порочным, чем дифференциальные зомби. Я знал, что рано или поздно мы перейдём и на эту дрянь.


    1. valis
      08.01.2020 16:41

      Ага, из той же серии что и простые числа.


  1. Rasato
    07.01.2020 12:44
    +7

    То есть наткнемся ли мы при бесконечном повторении на какую-либо степень двойки?


    1. ganqqwerty
      07.01.2020 13:25
      -10

      скорее уж на Пи


      1. Rasato
        07.01.2020 14:22
        +8

        Почему Пи? Любая степень двойки сразу схлопывает решение к 1.


        1. QtRoS
          07.01.2020 16:24

          Мне тоже так показалось, что все к этому сводится — умножение на 3 даёт некий рандом, плюс 1 даёт четность. Можно попробовать выяснить, сработает ли, допустим, с 7 вместо 3.


        1. ganqqwerty
          07.01.2020 18:17

          Не слушали вы новогоднее обращение Кнута! Где-нибудь точно появится Пи.


  1. ganqqwerty
    07.01.2020 13:29

    Я не понял про конфигурацию воды в пруду.


    1. Biga
      08.01.2020 00:50
      +1

      Форму поверхности воды можно описать функцией: высота воды от x и y (или от радиальных координат). Законы физики, относящиеся к движению воды можно описать дифференциальным уравнением (например, см. «уравнения мелкой воды»). И тогда первая функция (описывающая поверхность воды) получается как решение этого дифференциального уравнения.

      Фишка дифференциальных уравнений в том, что изменение системы целиком и полностью зависит от текущего состояния системы (и граничных условий). Если посмотреть на это с точки зрения дискретных вычислений, то это означает, что каждое следующее состояние вычисляется через предыдущее.

      Возьмём простейший пример дифференциального уравнения: x' = k*x, то есть скорость линейно зависит от положения. Если x0 = 1, то x' = k, значит следующее положение объекта будет x1 = x0 + k * dt. И так далее. При более сложном законе будет более сложная формула. Получается этакая последовательность вычислений, похожая на задачу из топика.

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


  1. SteelRat1
    07.01.2020 13:59

    Я правильно понял: раз к единице приводят числа, которые являются степенями двойки, то теория сводится к тому, что существует или не существует некое число, после которого оно, умноженное на 3 и увеличенное на единицу уже никогда не станет числом, которое можно представить как степень двойки?


    1. ZuOverture
      07.01.2020 16:12
      +4

      Операция 3x+1 над нечетным числом делает число четным, т.е. добавляет делитель 2, который тут же уничтожается операцией x/2. Вопрос в том, каковы оставшиеся новые делители — на своем обывательском уровне не рискну делать никаких предположений по этому поводу, но очевидно меняются радикально. Чем-то похоже на поведение линейного конгруэнтного генератора случайных чисел, где операции над числами тоже крайне простые, а результаты выглядят как хаос.


    1. arheops
      07.01.2020 20:38

      Задача просто хитро сформулирована.
      На самом деле, там два действия
      1) если четное, то разделить на два 2) если нечетное, то (3x+1)/2. И тут уже очевидность схлопывается, поскольку нельзя ничего сказать о новых делителях этого числа.


  1. ivanrt
    07.01.2020 15:03

    Нужно просто перенумеровать все числа с учётом их расстояния до 1 по этому закону. :)


    1. Sap_ru
      07.01.2020 20:24
      +1

      Мне кажется, что сейчас минимум пара десятков человек бросилась к компьютеру.
      А потом классифицировать и найти закономерность.


    1. gecube
      08.01.2020 13:58

      Ага. Пойти от обратного. Ответить на вопрос — какие числа дают в результате применения этих правил за один шаг числа из множества 1...10 (1...100, 1...1000). Посмотреть. Есть ли дырки. И попробовать растянуть выводы на все множество чисел )


  1. vassabi
    07.01.2020 15:17
    +3

    давым-давно (еще в прошлом столетии!), студентом катался на юга электричками — до сих пор лежит тетрадка с размышлениями по этой гипотезе в нескольких системах счисления (умножение на 3 и деление на 2 удобнее не в десятичной), которую исписал за это время…
    Эхх… видно пришла пора её уже выкидывать :) — чистой математикой я не занимался уже лет 10.


  1. shm-vadim
    07.01.2020 15:32

    У меня такое предположение, например:
    Пусть n — любое нечетное натуральное число (четные рассматривать смысла нет), тогда с вероятностью 1/2 после первого и второго действия над ним мы получим 1,5n+0,5, т.е. увеличение чуть более, чем на 50%. С вероятностью 1/4 мы после двух действий еще сможем разделить на 2, т.е. мы получим 0,75n+0,25 — уже уменьшение примерно на 25%. С вероятностью 1/8 мы сможем еще разделить на 2 и т.д. В этом отношении мне кажется, что подсчитав полную вероятность мы получим, что до того момента, как число снова станет нечетным, оно уменьшится относительно изначального n. Но у меня не хватает аппарата это подсчитать.
    Если же мое предположение о большей вероятности понижения верно, тогда с удлинением последовательности число будет все уменьшаться до минимального натурального, т.е. до 1.


    1. hahenty
      07.01.2020 15:56
      +1

      Полная вероятность (того, что мы наткнёмся на степень двойки,) стремится к единице.
      1/2 + 1/4 + 1/8 +… + 1/2^x
      Какую ещё вероятность поищем?


      1. shm-vadim
        07.01.2020 16:54

        Я немного о другом говорил. В моем предположении произвольное нечетное число до попадания в другое нечетное с вероятностью 1/2 увеличивается округленно на 50%, а с вероятностью 1/2 уменьшается, но я так сразу не могу подсчитать на сколько. В этом и весь мой вопрос. Т.к. если оно уменьшается быстрее, чем увеличивается, то рано или поздно мы придем к единице.
        Впрочем, получается, я сделал еще одно допущение в том, что 3n+1 — вполне обычное четное число, с вероятностью 1/2 делящееся на 4, 1/4 — на 8, 1/8 — на 16 и т.д. С этим, возможно, тоже надо разбираться.


        1. ShadowTheAge
          07.01.2020 21:29
          +1

          Такое наблюдение позволяет понять почему «возможно» «большинство» чисел становятся в итоге 1

          при этом «возможно» здесь потому что только первая такая операция действительно «случайна», а «случайность» последюущих уже вызывает вопросы

          а «большинство» здесь потому что даже маленькая вероятность чего-либо не гарантирует отсутствие таких чисел (к примеру если наивно посчитать вероятность того что число будет простым, то кажется как будто они должны будут кончиться)

          Вот в этих то «возможно» и «большинство» и загвоздка


          1. shm-vadim
            07.01.2020 21:37

            По мне как раз этот алгоритм должен быть универсален, поскольку мы все время движемся от одного нечетного числа к другому и при этом все время его понижаем. При этом каждое следующее нечетное число будет соответствовать тем же условиям, что и предыдущее, т.е. вероятность всегда будет указывать на дальнейшее понижение.
            Можно и по-другому сказать. Если вы с вероятностью 50% делаете шаг назад и с вероятностью 50% делаете 2 шага вперед, то рано или поздно вы достигнете указанную впереди точку, как бы далеко она от вас не была. По-моему, это можно считать доказательством. Осталось только реально эти вероятности посчитать. :)


            1. lagranzh
              08.01.2020 01:06
              -1

              вроде уже выше написали, но я повторюсь.

              А. Вероятностное док-во тут не подходит. Так вы можете доказать что «почти все» числа сходятся к 1. А надо доказать что все.
              Б. Вероятность 0 не значит что событие не возможно.
              Ц. Если я правильно помню, униформного распределения не существует на множествах меньше чем алеф один.


            1. ShadowTheAge
              08.01.2020 01:14

              Рассмотрим вырожденный пример
              Если мы попали в число, которое является степенью двойки, умножим на два. А если не является — уменьшим сразу до 1. Все ли числа уменьшатся до 1 в итоге?

              Какая вероятность того что большое число N является степенью двойки? Очень маленькая. И если является, то умножив его на 2 получим еще большее число, которое будет с еще меньшим шансом являться степенью двойки, так?

              Не так. Потому что тот факт то что число является степенью двойки изменяет вероятности. И если мы умножим степень двойки на 2, то шанс получить степень двойки оказывается вовсе не случайным событием.

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


    1. ivanrt
      09.01.2020 17:05

      Попробуй с числом 27 ;)
      Я тоже рассматривал по вероятностям, что по идее должно довольно быстро сходиться, но тут получается что оно 41 раз растёт и доходит до >9k
      Может исключения из правила очень маловероятны, но есть? ;)


      1. panteleymonov
        09.01.2020 17:15

        Да забавно.

        27
        27 (11011) 41 (100101) 31 (11111) 47 (111101) 71 (1110001) 107 (1101011) 161 (10000101) 121 (1001111) 91 (1101101) 137 (10010001) 103 (1110011) 155 (11011001) 233 (10010111) 175 (11110101) 263 (111000001) 395 (110100011) 593 (1000101001) 445 (101111011) 167 (11100101) 251 (11011111) 377 (100111101) 283 (110110001) 425 (100101011) 319 (111111001) 479 (111110111) 719 (1111001101) 1079 (11101100001) 1619 (11001010011) 2429 (101111101001) 911 (1111000111) 1367 (11101010101) 2051 (110000000001) 3077 (101000000011) 577 (1000001001) 433 (100011011) 325 (101000101) 61 (101111) 23 (11101) 35 (110001) 53 (101011) 5 (101) 1 (1)


        1. unC0Rr
          09.01.2020 17:33

          В плане сравнения любопытны 31 и 63, у них совпадение идёт уже с седьмого члена последовательности: 31,47,71,107,161,121,91,… и 63,95,143,215,323,485,91,…


          1. panteleymonov
            09.01.2020 17:41

            Вот в отдельной ветке обсуждения на этом я и построил свои доказательства. Начиная с отсечения четных (k*2), за тем всех k*4+1, затем k*8+3 и тд. остаются только число (да да это одно число) 2^n-1, при n стремящейся к бесконечности.


          1. panteleymonov
            09.01.2020 21:24

            Я могу узнать по бинарному коду числа сколько у него будет итераций (3*n+1)/2 до получения четного. у 27 (11011) два. У 31(11111) пять и тд. Все зависит от количества подряд идущих младших единичных бит. В моих примерах выше последовательность бит перевернута.


            1. dzsysop
              09.01.2020 22:08

              Если вы это можете доказать математически, то думаю это и будет решение.


              1. panteleymonov
                10.01.2020 00:27

                А это из предыдущего комментария следует. И тут нечего доказывать — это просто оптимизация алгоритма вычисления последовательности на несколько шагов вперед. Все k*8+1 — числа которые решаются (3*n+1)/4 и дают нечетное. В бинарном виде это числа nnnnnn001.
                Далее k*16+13 только для (3*n+1)/8 дают нечетное (nnnnn1101)
                k*32+5 для (3*n+1)/16 (nnnn00101)
                k*64+53 для (3*n+1)/32 (nnnn110101)
                k*128+21 для (3*n+1)/64 (nnnn0010101)


                Результат числа n у которого k первых единичных бит можно считать вот по такой формуле.
                (3^k*n+3^(k-1)+3^(k-2)*2+… +3^(k-k)*2^(k-1))/2^(k)

                Например 39 (100111) имеет 3 итерации результат 134 (10000110)
                (3^3*n+3^2+3^1*2+2^2)/2^3 = (27*39+9+6+4)/8 = 1072/8 = 134

                Можно считать по упрощенной формуле
                6*(3^k-1)*n+6*3^(k-2)+..+6*3^(-1)
                Где n — число без первых единичных бит и нуля, для 39 это 2 (10)0111.
                6*(9)*2+6*3^(1)+6*3^(0)+6*3^(-1)

                (54*2 + 18 + 6 + 2) = 134 (10000110)


            1. edo1h
              10.01.2020 05:06

              Я могу узнать по бинарному коду числа сколько у него будет итераций (3*n+1)/2 до получения четного

              и что это даёт? ну да, с 27 через 2 итерации будет падение, но что будет после этого падения же заранее неизвестно — может быть очередной рост, и т.д.


              1. panteleymonov
                10.01.2020 05:37

                Определение зависимости насколько падает и поднимается без итерирования по значению самого числа думаю что то всетаки даст, если дальше копаться. Например числа с чередующимися 01 дают большое падение. Остается только посчитать сколько из них с чередующимися и повторяющимися единицами строиться.

                Ну, а если начать с того что я начал, то часть чисел просто убирается из проверки. Из всего числового ряда остается немного — то что требуется действительно проверять.

                Например такие числа как 911 дают большой подъем и падение до 577. А другие с 4 итерациями дают только подъем. 35 такое же число, если определить характер этих чисел, то можно по одной формуле вычислить ряд который ведет заведомо к 1.


                1. michael_vostrikov
                  10.01.2020 08:49

                  Например числа с чередующимися 01 дают большое падение.

                  Это потому что умножение на 310=112, получаются все 1, и потом еще плюс 1.


                1. michael_vostrikov
                  10.01.2020 09:02

                  Например числа с чередующимися 01 дают большое падение.

                  Это потому что умножение на 310=112, получаются все 1, и потом еще плюс 1.


  1. muhaa
    07.01.2020 16:07

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


  1. BkmzSpb
    07.01.2020 17:43
    +7

    В прикрепленном видео довольно любопытный график показан. Интересно посмотреть на аналогичный график в логарифмическом масштабе, например log2. Для достаточно больших чисел (x >> 1) операция 3x + 1 в логарифмическом масштабе "практически" экивалентна сдвигу на log2(3) = 1.58, а операция деления на 2 — сдвигу на -1.


    Log-plot для числа 129


    1. BkmzSpb
      07.01.2020 18:34

      В конце я естественно напсал глупость — отношение количества увеличений к количеству уменьшений должно быть меньше 0.63.


    1. vics001
      07.01.2020 23:17

      А можно такой график для хотя бы 1-10 млн первых чисел


      1. BkmzSpb
        08.01.2020 14:06

        Ну естественно можно, они а) наверное где-то существуют уже, б) для числа 107 я не берусь предсказать, насколько последовательность может вырасти. Соответственно, вычисление одного числа в диапазоне "миллионов" может занимать продолжительное время, а построение последовательностей для нескольких миллионов чисел может оказаться задачей непростой.


        В любом случае, эти графики я построил в R буквально используя пару однострочных неоптимизрованных методов и ggplot2. Приложив чуть больше усилий к коду, можно я думаю собрать приличную статистику и на домашнем ПК/лэптопе.


    1. iago
      08.01.2020 11:11

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


      1. BkmzSpb
        08.01.2020 14:13
        +1

        Я не согласен. Хоть и существуют книжки и даже анекдоты о том, что самые сложные доказательства всегда скрываются за "очевидно" и "не трудно показать", в большинстве случаев это не так. Да и "рядовой инженер" умеет обращаться с числами.


        Касательно моего примера: под "очевидно" я понимаю, что если число увеличивается на 4 единицы, а уменьшается на 2, то если на каждое увеличение (+4) будет приходиться два уменьшения (2 x -2 = -4), конечное значение будет несильно отличаться от исходного сколько бы итераций вы не выполнили бы, и для сохранения этого баланса отношение числа увеличений (1n) к числу уменьшений (2n) должно быть 1n / 2n = 0.5. Если больше — последовательность уйдет на бесконечность, меньше — в 0.


        1. iago
          08.01.2020 15:33
          +1

          Спасибо за развернутый комментарий (только не в 0 а в 1 в нашем примере), это просто был сарказм. Как в этих мемах

          Мемы
          image
          image


          1. BkmzSpb
            08.01.2020 16:08

            В 0 в логарифмической шкале, т.к. цель это единица, а log2(1) = 0 (как и вообще любой логарифм единицы). Это можно увидеть на рисунке 1, в конце последовательности.


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


            Занудство

            Хотя в вашем же первом меме просто очень неудачное обозначение. Без знания конкретных операций можно увидеть, что оператор [., .] антикоммутативен, т.е. [x, y] = -[y, x]. Далее видно, что [x, y] = x * y - y * x, и * очевидно некоммутативно. Дальше просто раскрываете все кадратные скобки используя установленные нами свойства, что-то должно сократиться, видимо * ассоциативно, поэтому группируете обратно, вынося за скобки — вот и результат. При этом мы абсолютно не представляем, что это за операторы/опрации, и что такое множество D(A), но т.к. они подчиняются общим правилам, мы можем доказать верность утверждения.


    1. trapwalker
      09.01.2020 12:02
      +1

      А что получается, если гипотеза не верна, то есть некое самое первое число С (назовём его числом Коллатца). Это число не сводится операциями к 1.
      Очевидно, что оно нечетно, иначе оно не было бы первым. Оно либо формирует цикл, либо открывает собой некоторую цепочку, бесконечную или где-то тоже зацикленную.
      Задача сводится к доказательству несуществования такого числа.

      Интересно глянуть какими оптмизированными алгоритмами перебирают эту программно.


  1. neurocore
    07.01.2020 17:46
    -3

    Самый простой способ войти в историю — накидать скрипт, который берёт огромное случайное число и запускает процесс Коллатца в попытке найти цикл не проходящий через единицу. Тогда вся гипотеза будет опровергнута.


    1. ZuOverture
      07.01.2020 17:58
      +1

      BOINC@Home этим уже развлекались. Заказчики математики, при вычислениях использовали оптимизации. Величина аудитории, предоставляющей свои компы для вычислений, огромная. Так что способ не такой уж простой.


      1. Mad__Max
        07.01.2020 19:42
        +1

        Он не простой в том смысле, что проверка верности гипотезы на любом сколько угодно большом множестве чисел не будет принята в качестве «настоящего» доказательства.
        Хотя практически ее можно считать доказанной уже сейчас. Но практического применения насколько знаю у нее и нет никакого. А с точки зрения «чистой математики» нужно такое же чистое доказательство в общем виде, а не в частных случаях.

        Но она простая в том смысле что первое же найденное исключение (и тут перебор на компах вполне подходит) опровергнет теорему и закроет вопрос.


        1. ZuOverture
          07.01.2020 23:38
          +2

          Нет, он не простой в том смысле, что в силу вероятностного характера такого угадывания в историю вы скорее всего не войдёте, как не вошли 65+ тысяч человек занимавшихся этим ранее.


        1. valergrad
          08.01.2020 03:29
          +2

          Это настолько же осмысленно, как пытаться отсортировать колоду из 52 карт путем случайного перемешивания.
          Скорее всего даже менее осмысленно — карты все же когда-нибудь отсортируются, а вот здесь, вероятно, число не найдется никогда.


          1. Mad__Max
            08.01.2020 19:39

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


    1. vassabi
      08.01.2020 01:55
      +1

      «цикл, не проходящий через единицу» — это только один из вариантов. Там же еще может быть быть (по крайней мере ЕМНИП это не опровергнуто) и расходящаяся бесконечность. Её-то скриптом не найдешь!


      1. Mad__Max
        08.01.2020 19:43

        Почему не найдешь? Найдешь сразу же по переполнению. Вот доказать что последовательность именно бесконечная (а не просто на много-много порядков вверх уходит от исходного числа прежде чем снова свернуться к единице) численным методом не получится.

        Но такое выявленное «аномальное» число можно уже отдать математикам, чтобы они проверили анализ — а что в этом числе такого необычного(например разложить на множители для начала), что оно приводит к такому результату? И попробовать уже аналитически доказать, что последовательность получится именно расходящейся бесконечностью если начать с этого конкретного числа.


        1. trapwalker
          10.01.2020 10:23

          Дело в том, что числа могут оказаться очень и очень большими. Также очень большим может оказаться и длинна цепочки. Ну в смысле, что может быть мы и не встретим «аномально» большой цепочки, а просто будем встречать цепочки всё длиннее и длиннее и каждый раз не будем наверняка знать бесконечная она или нет.
          Вообще задача не бесполезная. Наверняка там по пути кучу всего изобрести удастся. От всяких оптимизаций до фрактальных каких-нибудь закономерностей полезных.
          Вон от множества Мандельброта или от шума Перлина какая польза? А она есть!


          1. Mad__Max
            11.01.2020 01:43

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

            Исключение — относительно монотонно возрастающие ряды в которых вероятность встретить повтор не растет от длины.
            Но в таких рядах(при их наличии) мы в первую очередь не с не хваткой объема памяти для хранения членов ряда столкнемся, а с переполнением разрядности используемых вычислений — быстро появляются слишком большие (длинные) числа не умещающиеся даже в «длинную арифметику».
            Тут конечно доказать что такой найденный ряд будет и дальше бесконечно возрастать численными методами не получится — с этим я и не спорил.


    1. sebres
      08.01.2020 03:12

      Дело в том что опровергнуть как раз и не получится, т.к. для этого нужно продолжать цикл бесконечно (просто потому что и числа в неравенстве fi(x) != 2n могут расти бесконечно)…

      Умолчим про то, что уже какая-нибудь растущая итерация на числах близких к каким то 10108 (что все-еще меньше Гуголплекса, но уже много раз больше чем Гугол), не говоря уже про то чтобы подобраться к следующей границе 2n+1 (если даже 2n не полностью «покрыта»), уже тупо не хватит всех вычислительных ресурсов земли.

      Чтобы было представление о чем это вообще — вот тут на коленке «собранный» простейший вычислитель-итератор на питоне, а вот простые примеры:

      >>> fci(7)
      reached 16 == 2**4 after 12 iter(s), max: 52
      >>> fci(27)
      reached 16 == 2**4 after 107 iter(s), max: 9232
      >>> fci(2**32-1)
      reached 16 == 2**4 after 447 iter(s), max: 3706040377703680
      >>> fci(2**64-1)
      reached 16 == 2**4 after 859 iter(s), max: 6867367640585024969315698178560
      >>> fci(2**64+1)
      reached 16 == 2**4 after 479 iter(s), max: 55340232221128654852
      
      >>> fci(2**(10**4)-1)
      reached 16 == 2**4 after 134400 iter(s), max: 3e4771 (тут как бы 4,5 тысячи нулей)
      >>> fci(2**(10**5)-1)
      reached 16 == 2**4 after 1344922 iter(s), max: 2e47712 (тут как бы 45 тысяч нулей)
      

      Особенно предлагаю обратить внимание на последние два результата.
      2**(10**8)-1 в один поток, да на питоне (да хоть и на C с самой быстрой «длинной» математикой, оптимизированной под алгоритм), можно даже не пробовать…

      И я вас уверяю, это всё еще будет не бесконечный цикл. :)


      1. chapuza
        08.01.2020 07:19

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


        1. sebres
          08.01.2020 07:25

          Достаточно?!

          Т.е. построить lookup таблицу (граф, radix-/patricia-trie, whatever) для бесконечного множества огромных чисел и/или итераций (чтобы собственно найти «самое себя»)?
          А памяти хватит? :)


          1. chapuza
            08.01.2020 07:28

            Простите, я не понимаю, о чем вы.


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


            1. sebres
              08.01.2020 07:35

              Только вот ни «начальное» число, ни собственно «некоторое количество итераций» (т.е. расстояние от начального числа, до превращение его в «самое себя») не известны.
              Вывод — на каждой итерации снизу вверх запоминать, а сверху вниз сравнивать.
              Что в худшем случае выливается в сравнивать всех со всеми.

              Повторюсь, памяти хватит?

              А магию типа «приснилось число» и бац на 3-й итераций оно снова «тоже самое» оставьте для пикабу, плз.


              1. chapuza
                08.01.2020 07:40
                -1

                Дело в том что опровергнуть как раз и не получится, т.к. для этого нужно продолжать цикл бесконечно (просто потому что и числа в неравенстве fi(x) != 2n могут расти бесконечно)…

                Вот это ваше утверждение — чушь. Никакой цикл никуда бесконечно продолжать не нужно. Так понятнее?


                оставьте для пикабу

                Обязательно, вот только шнурки выглажу.


                1. sebres
                  08.01.2020 07:57

                  Если у вас есть единственный замкнутый цикл 1 -> 4 -> 2 -> 1 в самом начале (внезапно потому что тут есть «магическое» число 1, то это совсем не означает, что какая-то другая последовательность тоже замкнется.

                  Посмотрите на картинки типа «Iteration (stopping) time for inputs» или веер (треугольник) распределения…
                  Т.е. расти оно будет всегда (бесконечно или нет, не доказано).
                  Но что оно замкнется — это нонсенс. Что-то из оперы «А пацаны то не знали».

                  Так понятнее?


                  1. chapuza
                    08.01.2020 08:11
                    -1

                    Ладно, попробую в последний раз.


                    Рассмотрим вырожденный пример. Гипотеза: «не существует целого числа, в котором после гуголплекса нулей идет гуголплекс единиц». Ни один существующий в мире компьютер не справится решить эту задачу перебором. Тем не менее, очевидно, такое число существует, и не одно. QED.


                    В математике для опровержения гипотезы достаточно привести один пример. Вы утверждали, что для этого нужно продолжать какой-то цикл бесконечно. Это — неверно.


                    Предположите, умозрительно, что такое число, замыкающееся в цикл после сравнительно невеликого числа итераций существует. Далее предположите, что некий Васяо решил пособить Тао и наугад проверяет числа в районе Гуголплекса. И через день натыкается на такое число. Вероятность этого события, хоть и чрезвычайно мала, но отлична от нуля. Наткнуться на такое число, чтобы опровергнуть гипотезу, нужно ровно один раз.


                    А не «нонсенс» и «пацаны» — это вам надо бы на пикабу. Скриптики — это круто, но к математике имеет очень опосредованное отношение.


                    1. sebres
                      08.01.2020 16:01

                      Вы работу то хоть смотрели? Там черным по белому «almost all positive
                      integers do not lie in a periodic Collatz orbit».
                      А теперь забудем слово «почти» и всякие вероятностные «logarithmic density» и т.д.
                      Если (невероятно, но вдруг) какая-то замкнутая последовательность и существует, то минимальная длинна такой цепочки (цикла) будет не сильно отличатся от среднего числа итераций до первого спуска, что практически то же AVG значение до первой найденой степени двух (без учета вырожденных случаев, ака начинаем сразу с 2n).
                      А это даже для «небольших» чисел (21000, 22000, 24000, ..., 210000) очень длинные цепочки (1K, 10K, 20K, ..., 60K) и рост там очевиден.

                      Предположите, умозрительно, что такое число, замыкающееся в цикл после сравнительно невеликого числа итераций существует.
                      Предпологать не надо. Надо анализировать (ну или читать что Tao, Korec и др. про то уже написали).
                      Васяо решил пособить Тао и наугад проверяет числа в районе Гуголплекса.
                      Поперхнулся. What?!
                      Вы хоть раз пробовали умножить что-то в районе Гуголплекса (а это на минуточку 1010100, т.е. число с гугол нулями) хоть даже на 3?
                      Что-то мне говорит что на это не хватит памяти не то что у вас… Смею предположить, что ее врядли хватит у всех компьютеров человечества и всей известной вселенной, даже если размер бита будет равен размеру атома.
                      (в видимой части Вселенной порядка 1080 атомов, чтобы записать 1 Гуголплекс вам же нужно порядка 3.3*1099 бит).

                      Я надеюсь стало чуть понятней почему по моему скромному мнению слово «достаточно» тут не совсем подходит.


              1. unC0Rr
                08.01.2020 17:19

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


                1. sebres
                  08.01.2020 21:15

                  А черепахозайцем (т.е. сознательно увеличивая количество вычислений в два раза), да на длинной арифметике будет не выгодно совсем. Даже если проверку делать только при двойном спуске, т.е. когда одна итерация по условию когда x из нижеследующего после второго деления гарантированно меньше предыдущего x:
                  x = 3*x+1 / 2; while not (x & 1) { x = x2 / 2; compare(xhare, xtort) }; repeat
                  Т.е. только на гарантированном спуске (3*xi+1 / 4 < xi).

                  Floyd уместен когда сравниваются «готовые» элементы списка, а не когда они будут вычисляться на каждой итерации (т.е. не там где операция вычисления станет дороже операции сравнения).

                  Кроме того, пока что нет даже подозрения, что какое-то число «влетает» в бесконечный цикл — он пока у всех всегда заканчивался ожидаемо 2n (что есть начало спуска до 1) за какое-то (да иногда долгое, иногда очень, но) конечное время.


                  1. Mad__Max
                    09.01.2020 21:57
                    -1

                    На практике по-моему использует простой счетчик делающий +1 на каждой итерации. И если число не сворачивается к уже проверенному множеству за n итераций (и сотни достаточно), то проверять это число отдельно на предмет наличия замкнутого цикла в последовательности. Это будет крайне малая доля от общего количества проверяемых чисел.

                    А не в основном цикле перебора следить за отсутствием повторяемости в последовательности.


                    1. sebres
                      10.01.2020 18:42

                      В «основном цикле» проверяется число 24K-1.
                      Это число имеет последовательность, в которой допустим до 280 подъемов и спусков, и при этом «бегает» по числам в интервале (22K..24.5K) пока в конце не достигнет уже проверенную группу до 260 или (ожидаемо) гарантированный спуск на каком-то 2N.

                      При том что хранить все «проверенные» числа вы не хотите, единственная возможность это отсекать интервал (22K..24K-2), последовательно перебирая числа в «основном цикле».

                      Кроме того если вы посмотрите эту ветку комментариев выше, то возможно заметите что речь тут идет про какое-то «приснившееся» число (т.е. «случайное», для которого числа и менее его могут быть еще не «проверены»).

                      Вопрос: которое «множество» считать «проверенным», откуда у вас тут «сотня» когда там много-много порядков больше, а главное когда (на каком спуске/подъеме) запускать и главное останавливать того зайца Флойда?

                      Ну и напомню, что число может забираться сильно вверх, а диапазон (24K..24,5K) у вас не проверен по умолчанию, т.е. вопрос №2: почему вы исключаете что тот «теоретический» замкнутый цикл (aka periodic orbit) не находится где-то в этой области?


        1. edo1h
          08.01.2020 13:59

          так в статье же уже написано, что проверили достаточно много чисел — и подобного не нашли


  1. justhabrauser
    07.01.2020 18:26

    Интересно — сколько тактов CPU уйдет на одну итерацию?
    Если использовать ассемблер x86-64 и оперировать в пределах 64 бит.
    (могу предположить что порядка 6..10)


    1. Dima_Sharihin
      07.01.2020 19:20

      Если использовать ассемблер x86-64 и оперировать в пределах 64 бит.

      Так в этих пределах уже все посчитано, а длинная арифметика медленная ну вообще везде


      1. justhabrauser
        07.01.2020 19:30

        Если верить википедии, то не всё.
        Даже вы этих пределах.


        PS. у меня пока получилось порядка 30 тактов на итерацию; на C быстренько набросал.


      1. Mad__Max
        07.01.2020 19:50
        +1

        Вики говорит что уже проверены числа вплоть до 1 152 921 504 606 846 976 по состоянию на конец 2019 года.
        Это 2 в 60 степени. Т.е. до пределов быстрой 64 бит арифметики еще довольно далеко — на порядок дальше чем уже успели перебрать.


        1. red75prim
          07.01.2020 20:19
          +2

          Промежуточные результаты могут выходить за пределы 64-х бит


          1. Mad__Max
            07.01.2020 22:49

            Точно, последовательность же может и вверх довольно долго идти перед схождением к 1.
            И как раз такие последовательности в первую очередь и интересны и требуют проверки.
            Правда большая часть все же почти сразу идет вниз и поэтому по-идее можно продолжать считать на аппаратных 64 бит и только в случае переполнения подключать длинную арифметику. Т.е. просеиваем на 64 бит, отмечаем вызывающие переполнение числа и их уже считаем через библиотеку для длинной арифметики.


        1. justhabrauser
          07.01.2020 20:44

          У меня при 10 млн < n < 100 млн уже вышло за 32 бита.
          Не всё так просто.


    1. Mad__Max
      07.01.2020 20:01
      -1

      Наверно где-то так при ручной оптимизации. Плюс еще можно SIMD задействовать и проверять по несколько чисел параллельно в каждом такте.

      Проблема только в том, что среднее число самих интераций с ростом числа растет. После миллиона в среднем по 100+ итераций до сходимости к 1, после миллиарда уже по 200+ и т.д.
      В результате чем дальше продвигаемся, тем медленней идет перебор.


      1. Dima_Sharihin
        07.01.2020 20:06
        +5

        Ну зачем так сложно. Если уже доказано, что все числа в диапазоне 1..N удовлетворяют теореме, то достаточно свести число к любому, меньшему или равному N. Зачем передоказывать уже доказанное?


      1. justhabrauser
        07.01.2020 21:05

        SIMD там не сильно поможет.
        Считал в 32 бита, последовательно (с небольшой оптимизацией как вот рядом товарищ указал), при этом:


        • уже до 100 млн вычисления выходят за 32 бита
        • ориентировочно первый миллиард закончится за несколько секунд.
          То есть ориентировочно в первые минуты/часы вычислений 64 бит мы выйдем за пределы этих 64 бит, так что SIMD-инструкции всё.


        1. Static_electro
          07.01.2020 22:07
          +1

          почему минуты/часы? Если наивно считать скорость перебора постоянной, то перебор, который занимает секунду до 2^32, займет 2^32 секунд, чтоб дойти до 2^64, разве нет?


          1. justhabrauser
            07.01.2020 22:20

            Ну как-то так, да. Не меньше, по крайней мере.
            Если не учитывать переполнение, которое наступит раньше :-)
            Моя оценка — переполнение 64 бита наступит по достижении проверяемым числом 32 бит.
            10 минут на моем P4-3GHz


          1. justhabrauser
            08.01.2020 05:51

            Мда… дошел ровно до 2^31 — дальше переполнение 64 бит промежуточным результатом.
            А uint128 в мой gcc-9.2.1 не завезли.
            Так что на этом лично для себя я теорему доказал :-)


            И да — скорость перебора линейна (точнее — постоянна).
            В среднем 5 итераций на число и хоть тресни (в пределах 1..2^31).
            И еще — максимальное число, достигаемое в расчетах, занимает ровно в 2 раза больше бит, чем тестируемое число. В тех же пределах.


            1. lany
              08.01.2020 12:44

              Хм. У меня переполнение наступает позже, на числе 23,035,537,407 (за две минуты доходит до этого числа на джаве). Я оптимизировал следующим образом. Во-первых, уже отметили, что можно рассматривать только нечётные числа. Соответственно будем перебирать не x из исходной постановки задачи, а y = (x-1)/2. То есть x = 2y+1, и тогда следующее число за ним — 3x+1 = 6y+4. Очевидно, оно чётное, сразу делим пополам (3y+2). Далее его делим на два пока делится (то есть обрезаем правые нулевые биты), а потом вычитаем единицу и ещё раз делим на два, чтобы получить новый y (то есть обрезаем ещё один единичный бит). По сути надо сдвинуть результат вправо на numberOfTrailingZeros+1. NumberOfTrailingZeros — это инструкция TZCNT, быстро работает. С помощью этих оптимизаций мы также отыгрываем один битик от числа, то есть можем работать с 65-битным промежуточным результатом.


              Код на Java
              public class Collatz {
                public static void main(String[] args) {
                  long limit = Long.divideUnsigned(-1L, 3) - 2;
                  for (long num = 1; ; num++) {
                    for (long next = update(num); next >= num; next = update(next)) {
                      if (next == num || next > limit) {
                        System.out.println((next == num ? "Found: " : "Overflow at: ") + (num * 2 + 1));
                        return;
                      }
                    }
                  }
                }
              
                private static long update(long value) {
                  value = value * 3 + 2;
                  return value >>> (Long.numberOfTrailingZeros(value) + 1);
                }
              }


            1. edo1h
              08.01.2020 12:59

              А uint128 в мой gcc-9.2.1 не завезли.

              как это так?!? или система 32-битная?


              1. justhabrauser
                08.01.2020 15:48

                32 бита да.
                Да итак 5 минут уходит на это дело.
                Дальше — линейно.
                То есть до переполнения 128 бит у меня уйдет примерно 40 килолет.
                А завтра на работу...


            1. rogoz
              08.01.2020 16:13

              Всё есть
              godbolt.org/z/XUHReJ
              Правда учитывая

              10 минут на моем P4-3GHz
              64 бита может не быть.


              1. justhabrauser
                08.01.2020 16:15

                64 бита есть, только ОС 32 бит.


    1. justhabrauser
      07.01.2020 22:09
      +1

      Сам спросил — сам ответил.
      Накатал быстренько на C, посчитал первый миллиард (1..1000000000):


      • уходит от 30 до 70 тактов на итерацию (зависит от кол-ва проверок и оптимизаций)
      • среднее кол-во итераций дошло до ~200/число (без оптимизации, и медленно растет) или 5/число (с оптимизацией, и не меняется (!)).
      • максимальное число при вычислениях — 1414236446719942480 (прописью: полтора дохреллиарда), то есть на… в два порядка выше максимального проверяемого числа.


      1. Stas911
        07.01.2020 23:35

        Плотность распределения количества итераций как выглядит?


        1. justhabrauser
          07.01.2020 23:42
          +1

          Я не копал так глубоко — потыкал 10^n при n=[1..9] и всё.
          Среднее значение итераций ровно нарастает от 1 до 200. Без оптимизации.
          С оптимизацией стоит на ровно 5.
          Могу сырцы заслать, потыкаете. Мне времени было жаль :-)


          1. valergrad
            08.01.2020 03:32

            Прям ровно 5? Не наведет ли это на какие-нибудь мысли Теренса Тао… Хотя он вероятно знает это и так.


            1. justhabrauser
              08.01.2020 03:55

              Смотрим:


              bash-5.0$ for i in 10 100 1000 10000 100000 1000000 10000000 100000000; do ./collatz64 $i; done
              Max: 10, iters: 28 (2 iters/digit); Greatest digit: 52
              Max: 100, iters: 803 (8 iters/digit); Greatest digit: 9232
              Max: 1000, iters: 5379 (5 iters/digit); Greatest digit: 250504
              Max: 10000, iters: 51838 (5 iters/digit); Greatest digit: 27114424
              Max: 100000, iters: 520911 (5 iters/digit); Greatest digit: 1570824736
              Max: 1000000, iters: 5226260 (5 iters/digit); Greatest digit: 56991483520
              Max: 10000000, iters: 52359351 (5 iters/digit); Greatest digit: 60342610919632
              Max: 100000000, iters: 523898496 (5 iters/digit); Greatest digit: 2185143829170100

              (iters — это сумма всех итераций по всем числам в диапазоне)
              Разумеется не ровно 5.0, а целое.
              Но где-то так, да.


              PS. после оптимизации естественно выпадают все четные числа, например.


              1. edo1h
                08.01.2020 12:54

                а не пробовали поиграться множителем? выше предполагали, что может не только с 3 работать


                1. edo1h
                  08.01.2020 13:57

                  проверил, работают только 1 и 3


                1. justhabrauser
                  08.01.2020 15:44

                  К этому времени задача потеряла всякий смысл (которого и не было).
                  Так что поиграться со шрифтами c множителями — можете продолжить :-)


  1. DEM_dwg
    07.01.2020 21:28

    А что если посмотреть на эту задачу, с в другой системе исчисления.
    Например в двоичной.


    1. justhabrauser
      07.01.2020 21:52
      +1

      И чем этот взгляд принципиально отличается?
      Числа другие получатся?


  1. Dr_Sigmund
    07.01.2020 21:35
    +2

    В университетские годы тоже ломал над этим голову. Единственное мало-мальски осмысленное заключение, которое получилось сделать, было следующим: если существует N, не сходящееся к 1, то не сходиться оно может двумя способами: либо генерирует цикл конечной длины, либо порождает стремящуюся к бесконечности последовательность.
    Исходя из этого, я пытался доказать, например, что циклы невозможны в принципе — это было бы уже что-то, но не преуспел.


  1. Wesha
    07.01.2020 22:13
    +1

    «Я не ожидал решить задачу полностью, — сказал Тао, математик из Калифорнийского университета в Лос-Анджелесе. – Но у меня получилось сделать больше, чем я ожидал».
    Напомнило
    Минут двадцать спустя Маккиш снова остановил космокатер. В этих
    соревнованиях неминуемо настает момент, когда все начинает казаться
    бессмысленным. Пробиться к поверхности планеты невозможно, об этом
    нечего и думать. Да и зачем? Что могло ждать человека на этой плоской
    равнине, даже если он найдет ход? Только сознание того, что в памяти
    компьютера теперь будет маршрут, по которому добраться сюда сможет
    каждый желающий. Нелепыми были бесконечные шатания космокатера
    взад-вперед, вверх-вниз, вправо-влево, нелепым был Кубок Кларенса,
    нелепой была и сама открытая капитаном планета с атмосферой,
    изрезанной каналами. Несуразный природный феномен, только и всего.
    Существует он, и ладно, надо было зафиксировать его существование и
    тут же об этом забыть.

    Маккиш двинулся назад. Правда, совершенно машинально он продолжал
    простукивать стенки канала. И довольно скоро открыл новый ход — тот
    резко уходил вниз. Мгновение помедлив, пилот повернул космокатер.
    Ход свернул вправо, потом влево. Понемногу Маккиш увеличивал
    скорость, а ход никак не кончался. Он был самым длинным из всех, по
    каким приходилось сегодня двигаться ярко-красной «семерке».
    Владимир Малов. НА КУБОК КЛАРЕНСА


    1. Static_electro
      07.01.2020 22:51

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


      1. Mad__Max
        08.01.2020 19:57

        Лучше пнуть по адресу habr.com/ru/feedback


  1. DaneSoul
    07.01.2020 22:58
    +2

    Что 99% начальных значений, больших, чем квадриллион, в итоге приходят к величинам, меньшим 200.
    Так все же числа меньше 200 приходят к 1 при продолжении вычисления алгоритма, так?
    Так в чем тогда смысл именно такой формулировки?
    То есть разве нельзя сказать что «99% начальных значений, больших, чем квадриллион» приходят к 1?
    А если учесть, что до квадриллиона уже было доказано что все приходят к 1, то и еще более обобщить: «99% всех значений приходят к 1».


    1. gremlin244
      08.01.2020 02:33
      +1

      Вот тоже не понял. И зачем вообще такая точность, «к числам меньшим 200». Ведь если уже проверено что точно сходятся к единице числа вплоть до 2^60, как писали выше, то достаточно того, что 99% сходятся к числам меньшим 2^60, а там уже все посчитано.
      Я так, с дивана, не математик ни разу. Просто чисто интуитивно кажется, что чем шире достаточное условие (а к 2^60 всяко шире чем к 200), тем должно быть попроще. С другой стороны труъ математикам вообще наверное фиолетово какой там порядок чисел, должно же работать «почти для всех», а на фоне каких-нибудь совсем безумных чисел что одно, что другое крохи.


    1. edo1h
      08.01.2020 12:53

      очевидно, это это кривой перевод. предположу, что имелось в виду "возможно не более 200 различных исходов".


  1. SingularityUrBrain
    07.01.2020 23:43
    -1

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

    Интересено еще то, что если взять простые числа 7, 11, 13, то у 7 будет самая большая последовательность до 1, а у 13 самая маленькая, хотя 7 и 13 имеют в остатке 1 при делении на 3, а 11 имеет 2. Однако было бы неразумным не брать в выборку 11, но взять 13.


    1. michael_vostrikov
      08.01.2020 16:41

      Это потому что у 7 все биты в двоичной системе равны 1. У таких чисел самая длинная начальная последовательность из нечетных чисел (до появления первого четного числа). Хотя это не означает самую длинную последовательность в целом, так как такие числа могут появляться в середине последовательности для других чисел.


  1. ivan386
    08.01.2020 04:12

    Походу задача сводится к вопросу: Сможет ли (X — 1)/3 покрыть все нечётные числа?


    1. chapuza
      08.01.2020 07:24
      +2

      Почему это? Кроме того, (x - 1) / 3 очевидно может покрыть все нечетные числа.


      Возьмем нечетное число. Помножим на три. Добавим единицу. Вот вам x для этого нечетного числа, пользуйтесь.


      1. ivan386
        08.01.2020 10:28

        Логично. В таком случае похоже что условия покрывают все натуральные числа.
        Если идти в обратную сторону от единицы (как указанно на гифке).
        Ветка X*2 гарантированно даёт бесконечное множество начальных чётных чисел. От неё соответственно бесконечное множество ответвлений разной длинны сочетаний (X — 1)/3 и X * 2 которое даёт все остальные натуральные числа.


        1. chapuza
          08.01.2020 10:30

          Ну, теперь осталось доказать, что мощности множества ответвлений и множества натуральных чисел совпадают (hint: это доказать невозможно), и мы в дамках.


          1. ivan386
            08.01.2020 12:01

            Такой вариант:
            X3 + 1 — результат всегда чётное при X нечётном (бесконечное множество)
            X/2 — результат чётное и нечётное при X чётном (бесконечное множество)
            2^X — чётный лифт к еденице к которому в конечном итоге приведут обе ветки (бесконечное множество входов)


          1. Deepwarrior
            08.01.2020 22:22

            Мощности совпадают, в обоих случаях счётно. Другое дело, что это ничего не гарантирует.


            1. chapuza
              09.01.2020 08:56

              Разумеется, спасибо, поторопился.


  1. panteleymonov
    08.01.2020 05:55
    -1

    По мне решение простое. Если представить числа в бинарном виде и посмотреть их изменения. То умножение на 3 будет банальной обманкой. Суть в том что прибавление Единицы каждый раз, убирает единичный бит (несколько) из бинарной последовательности, сводя таким образом число к 100000...000. Которое несомненно при делении на 2 или сдвиге в право, в конечном итоге даст единицу. Умножение на 3 в некотором роде путает это стремление к одному единичному биту, но не аннулирует его.

    То есть единственное бинарное число n, которое генерирует само себя после (n+n+n+1) в циклической последовательности, это единица. Могло бы быть любое, если бы это было (n+n+n+n). Но нет, именно это выражение (3n+1) сводит все к одному единичному биту в числе.

    Я бы даже расширил эту задачу до (k*n+1), где k — любое нечетное.


    1. mayorovp
      08.01.2020 10:25

      Умножение на 3 в некотором роде путает это стремление к одному единичному биту, но не аннулирует его.

      А доказать можете? :-)


      1. chapuza
        08.01.2020 10:32
        +1

        По-моему, заглавная фраза «По мне решение простое» из предыдущего комментария полностью отвечает на ваш вопрос :)


        1. panteleymonov
          08.01.2020 13:58
          -1

          «Ха ха». Не так важен ответ, сколько стеб над ним. В таком случае, есть ли смысл объяснять? Еще одно доказательство — троли рулят ресурсом.


      1. panteleymonov
        08.01.2020 11:54

        Что именно доказывать? Что c+1 на определенном шаге даст 2^m — которое сократиться и станет единицей, с=3*n. Вопрос сводиться к правилам объясняющим что такое четное и нечетное и их свойствам.

        Из задачи в принципе можно выкинуть условия, введя функцию n=n/pow(2,first_bit(n))
        Выражение (3*n+1) всегда дает четное. что означает минимум одно последующее деления на 2. То есть first_bit(n) всегда больше нуля. Соответственно, итерация всей задачи описывается как:
        n=(3*n+1) // генератор псевдослучайной последовательности
        n=n/pow(2,first_bit(n)) // нормализация мантиссы


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

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


        1. michael_vostrikov
          08.01.2020 14:29
          +1

          Соответственно, итерация всей задачи описывается как:
          генератор псевдослучайной последовательности
          нормализация мантиссы

          Ага, только проблема в том, что если деление на 2 только одно, то получающееся нечетное число больше предыдущего.


          1. panteleymonov
            08.01.2020 14:47

            Да, на этом, на самом деле, можно построить доказательство.
            Представим что мы последовательно проверяем числа от 0 до бесконечности.
            Каждое четное I нам дает число меньше его самого. Но так как мы уже проверили все числа меньше I, то и последовательность с текущем числом приводит к единице.

            Остаются нечетные, которые могут дать только одно деление на 2. Если взглянуть на первую итерацию нечетных I, с выражением (3*n+1)/2 то получим:
            3 -> 5
            5 -> 8
            7 -> 11
            9 -> 14
            11 -> 17 ..

            Если будем продолжать, то заметим что каждая второе нечетное I на первой итерации дает четное число, которое можно поделить еще раз на 2.

            Таким образом, из не решенных нечетных чисел, от каждого k*2+1, мы пришли к каждому k*4+3. Если проверить следующую итерацию каждого k*4+3, то также получим чередование четных и нечетных уже на второй итерации. То есть количество не решенных последовательностей будет сводиться к каждой k*(2^p)+(2^p-1).

            Ну и при «p» стремящейся к бесконечности, число не решенных последовательностей стремиться к нулю.


            1. mayorovp
              08.01.2020 14:57
              +1

              Если проверить следующую итерацию каждого k*4+3, то также получим чередование четных и нечетных уже на второй итерации.

              Вы забыли про тот факт, что 1,52 > 2, так что однократное дополнительное деление на 2 вас уже не "спасёт", чтобы получить число, меньшее исходного, вам понадобится поделить уже на 4.


              В итоге, на втором шаге у вас "вылетает" уже не половина чисел, а всего лишь четверть; ну а оставшиеся 3/4 разбиваются на две группы, обладающие разными свойствами.


              1. panteleymonov
                08.01.2020 15:02

                Вы забыли про тот факт, что 1,52 > 2, так что однократное дополнительное деление на 2 вас уже не «спасёт», чтобы получить число, меньшее исходного, вам понадобится поделить уже на 4.

                Я ничего не забыл и как раз таки отсек все числа которые можно поделить на 4. А те которые делятся только на 2, на второй и далее итерациях, становиться меньше.

                Мы уже условились что все четные имеют решение, так что не важно меньше они или больше, также не важно на какой итерации они получены, после первого деления на 2, если мы имеем четное то последовательность кончается единицей.
                3 -> (10/2)5, (16/2)8
                7 -> (22/2)11, (34/2)17
                11 -> (34/2)17, (52/2)26
                ...

                В итоге, на втором шаге у вас «вылетает» уже не половина чисел

                Половина чисел от оставшейся половины, То есть в остатке имеем четверть, далее восьмую. И так до 1/бесконечность.
                оставшиеся 3/4 разбиваются на две группы

                Мы уже на первом этапе убрали половину (четные), откуда взялись обратно эти самые 2/4 или 1/2?


                1. Wesha
                  08.01.2020 15:29
                  +1

                  Половина чисел от оставшейся половины,


                1. mayorovp
                  08.01.2020 22:59

                  Мы уже условились что все четные имеют решение

                  Нет, так "уславливаться" нельзя.


                  Если мы по индукции доказываем утверждение "для любого N все числа K<N имеют решение", то любое чётное N и правда можно выкинуть в силу очевидности доказательства для этого случая. Но нельзя выкинуть чётное K>N, потому что для чисел больших чем N мы ещё ничего не доказали.


                  1. panteleymonov
                    08.01.2020 23:31

                    Нет, так «уславливаться» нельзя.
                    Еще как можно.

                    Но нельзя выкинуть чётное K>N, потому что для чисел больших чем N мы ещё ничего не доказали.

                    Следуя из того, что все четные N дают заведомо меньший результат в два раза на следующей итерации, и все из них всегда дают нечетное значение после постоянного уменьшения на два. То все что нам нужно это искать ответы для нечетных чисел. Останавливая последовательность итеративного поиска единицы на появлении четного. Которое опять таки приводит нас к расчету нечетного числа.

                    Например мы не выкидываем число 112 при К=2.
                    Но для 112 последовательность приводит к 7, которую мы в любом случае не пропустим. И это действительно для все четных. А следовательно четные считать ненужно.

                    То есть для четного K>N, нормализованного k=k/pow(2,first_bit(k)) — это всегда некое нечетное из нечетного ряда. Мы просто не считаем четные числа за ненадобностью на первом этапе.

                    Тут больше смысл не найти решения, а найти нерешаемый K элемент ряда. То есть бесконечный ряд. Он появляется если взять число 2^m-1 (это единичные биты), при этом количество непрерывных итераций (3*n+1)/2 с нечетным результатом всегда равно m, плюс некое k итераций которое состоит из последовательностей четных и нечетных результатов. При этом получается k>m.


                    1. mayorovp
                      09.01.2020 06:24

                      То есть для четного K>N, нормализованного k=k/pow(2,first_bit(k)) — это всегда некое нечетное из нечетного ряда. Мы просто не считаем четные числа за ненадобностью на первом этапе.

                      Вот только k тоже > N.


                      1. panteleymonov
                        09.01.2020 14:31

                        Также как для 7, 11. И что дальше?
                        Самое главное что теперь нет четных.
                        Но каждый K=k*4+1 всегда решается как (3*n+1)/4.
                        А также главное что каждое k*4+1 не выдает на итерации ни какое число из того же ряда. (также как четные всегда приводят к нечетным)

                        То есть остаются только k*4+3 элементы, точно также как отсекаются четные, также отсекаются все k*4+1 элементы. Тоже самое повторяется для k*8+3 элементов. Так ряд нерешенных K>N сужается до бесконечности.

                        Числа которые остаются нерешенными это k*(2^n)-1, где n — стремиться к бесконечности. Но количество таких чисел стремиться к нулю.


                        1. mayorovp
                          09.01.2020 15:24

                          Ряд вы рассматриваете для N, не для K.


                          1. panteleymonov
                            09.01.2020 15:43

                            С какой стати? После утверждения что K>N, а К это не решенные числа, то я как раз рассматриваю K. И потом в рамках условия, что четные ссылаются на нечетные, а те в свою очередь на другую часть нечетных, понятие решенных K<N и нерешенных K>N становиться второстепенным.

                            Или вам опять нужно доказывать что все четные — это нечетные числа умноженные на 2^n? Не надо доводить до абсурда свое опровержение.


                            1. mayorovp
                              09.01.2020 16:05

                              У вас шаг индукции выглядит как "предположим, все числа <N уже сходятся, рассмотрим N". Не "все больше N", а одно единственное N.


                              Теперь вы, в какой-то момент рассуждений, рассматриваете K = f(N), в которое ваше N превратилось. И должны доказать, что через сколько-то шагов оно окажется меньше N.


                              1. panteleymonov
                                09.01.2020 16:22

                                Выглядит для вас? А на то как оно на самом деле выглядит, вы понять не утруждались? «Может оно зеленое?» Че за бред?

                                Я всего лишь указал что есть некоторый ряд нерешенных K. Для которого изначально все это описывал. А не то что вы указали. И не про каких «меньше N» далее я не заикался, все рассуждения идут параллельно утверждению «меньше N». Неоднократно утверждая, что это критерий тут не играет существенной роли.


                                1. mayorovp
                                  09.01.2020 17:16

                                  Ну тогда я вообще не вижу смысла во всех ваших доказательствах. Как и связи с двоичной системой счисления, кстати.


                                  Так что с тем, что решение у вас простое, вы явно погорячились.


                                  1. panteleymonov
                                    09.01.2020 17:22

                                    А кроме как «мне кажется», у вас есть действительные основания для вашего опровержения?

                                    Все доказательство свелось к тому что числа <N не являются ключевым решением и поэтому (по вашему) это доказательство не имеет смысла?


                                    1. mayorovp
                                      09.01.2020 17:24

                                      Для этого сначала требуется понятное доказательство.


                                      1. panteleymonov
                                        09.01.2020 17:27

                                        То есть опять возвращаемся к тому, что начинаем доказывать, что «все четные это нечетные числа умноженные на 2^n.» так? Поскольку это и является ключем, а вы я так полагаю этого так и не поняли.


                        1. michael_vostrikov
                          10.01.2020 09:01

                          Самое главное что теперь нет четных.

                          У вас нет четных, но нечетные на следующих итерациях все равно больше исходного числа.


                          11 -> (34/2)17, (52/2)26, (26/2)13


                          13 больше 11.


                          Ну и надо еще отсутствие циклов доказать.


                          1. panteleymonov
                            10.01.2020 17:47

                            Пока вы кичились утверждениями что «нельзя избавиться от четных». Ряд для 11, простым алгебраическим преобразованием стал выглядеть так:
                            11 (1011) 13 (1101) 5 (101) 1 (1)

                            А те числа которые здесь отсутствуют были выброшены за ненадобностью, как и четные.
                            rextester.com/CVV6933

                            И тем более стало возможным увидеть длинные ряды своими глазами, а не полагаться на якобы недоказанную теорию.

                            1000001
                            1000001 (11110100001001000001) 750001 (10110111000110110001) 562501 (10001001010101000101) 105469 (11001101111111101) 39551 (1001101001111111) 337891 (1010010011111100011) 11879 (10111001100111) 20047 (100111001001111) 25373 (110001100011101) 9515 (10010100101011) 10705 (10100111010001) 8029 (1111101011101) 3011 (101111000011) 847 (1101001111) 1073 (10000110001) 805 (1100100101) 151 (10010111) 1 (1)


                            1. michael_vostrikov
                              11.01.2020 00:36

                              Я не говорил ничего про то, что нельзя избавиться от четных.


                              Ряд для 11, простым алгебраическим преобразованием стал выглядеть так

                              И что это доказывает? Вы просчитали последовательность до конца и убедились, что она сходится к 1. Как и остальные проверенные числа, эка невидаль)


                              Что доказывает длинный ряд, я тоже не понял, извините. Для числа 327 он длиннее.


                  1. panteleymonov
                    09.01.2020 00:04
                    +1

                    Короче, все четные это нечетные числа умноженные на 2^n. Так что нет смысла их считать.


    1. edo1h
      08.01.2020 14:10

      Я бы даже расширил эту задачу до (k*n+1), где k — любое нечетное.

      проверил, похоже кроме 1 и 3 ничего не работает


      1. panteleymonov
        08.01.2020 14:21

        Согласен, поспешил, но неплохо было бы результаты тестов увидеть.
        Например при к=5
        i=5 -> 26, 13, 66, 33, 166, 83, 416, 208, 104, 52, 26, 13… бесконечно зациклено.

        Но все таки, если работает с тройкой, то и с числами 3*(2^m) вполне работает. Но это бессмысленно.


        1. panteleymonov
          08.01.2020 17:51

          Тоже, не все гладко.


    1. DrGluck07
      08.01.2020 22:07

      Сейчас будет дурацкое предположение. Операция (n * 3 + 1) / 2 всегда добавляет максимум 1 бит в наше число (честно, я проверял). Но мы регулярно будет получать дополнительные нули справа, которые уменьшают наше число как последовательность нулей и единиц. И возможно неважно какой длины последовательность нулей и единиц слева, важно, что расти она может только на 1 бит за операцию, но регулярно будет сокращаться на некоторое количество нулей справа. Бездна начинает смотреть на меня и я боюсь дальше думать об этом. Если вы найдёте эти записки, заклинаю всеми богами, не повторяйте моей ошиб…


      1. panteleymonov
        08.01.2020 22:40

        Я уже это проверил выше и пол дня назад все описал, получается сокращение всех проверяемых чисел на 2. Но есть также загвоздка. Есть брать числа 2^n-1 то количество итераций (n * 3 + 1) / 2 увеличивающих результат на 1 бит, дающее нечетное, будет равно n, плюс еще большее количество итераций которое его сократит до 1. Это очень много если брать бесконечность, то эта последовательность преобразований ни когда не кончиться.


      1. unC0Rr
        09.01.2020 10:42

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

        Edit: это не так, нашёл опровержение.


        1. unC0Rr
          09.01.2020 13:12

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


          1. DrGluck07
            09.01.2020 15:39

            Сейчас ещё кто-нибудь сделает какой-то вывод из этого. И вот так Хабр внезапно решит сложную математическую проблему современности )


          1. panteleymonov
            09.01.2020 16:14

            Это интересное замечание, поскольку в моих поисках я нашел закономерность, что как раз самые большие ряды с наибольшим скачком для чисел 2^n-1.
            Если это 3, то максимальный скачек не больше 8. Напомню что это для (3*n+1)/2.
            То есть для чисел [2^n… 2^(n+1)-1], ряды получаются с числами не больше 2^(n+2).


            1. unC0Rr
              09.01.2020 16:43

              Это утверждение касается только количества единиц в двоичной записи, нулей может быть намного больше (но не слишком много, иначе количество единиц будет радикально увеличиваться при последующих умножениях на 3) и порядок, соответственно, намного выше. В качестве примера: для стартового числа 31 в последовательности встречается число 3077.


  1. michael_vostrikov
    08.01.2020 11:01
    -1

    Тут как-то связано с конечной записью числа, не могу сформулировать математически. Любое число можно представить в виде 2x или 2x+1, само число x тоже можно представить в таком виде, и т.д., числа в этих выражениях это биты в двоичной записи числа. И в конце этой цепочки всегда находится 0, это четное число. Мне кажется, надо отсюда идти.


    1. michael_vostrikov
      08.01.2020 18:34

      Разверну немного мысль. Для чисел вида 2n-1, у которых все биты равны единице, длина последовательности до первого четного числа равна количеству бит.


      7, 11, 17 -> 26
      63, 95, 143, 215, 323, 485 -> 728
      127, 191, 287, 431, 647, 971, 1457 -> 2186

      Поэтому тут явно есть какая-то связь.


      1. staticlab
        08.01.2020 19:51

        3*7+1 = 22


        1. michael_vostrikov
          08.01.2020 20:09

          После 3x+1 результат всегда четный, поэтому я сразу делил на 2.
          То есть в стандартной формулировке тут получается первое число, когда можно поделить на 4 и получить результат меньше предыдущего.


  1. abkjcjd
    08.01.2020 13:22

    А если подойти к решению с другой стороны? :)
    Четные числа не рассматриваем, с ними и так понятно.
    Обозначим искомое число x, тогда a = 3x+1, отсюда x = (a — 1)/3, уравнение имеет смысл для всех а >= 4. Получаем:
    a=4 x=1
    a=5 x=4/3
    a=6 x=5/3
    a=7 x=2
    a=8 x=7/3
    a=9 x=8/3
    a=10 x=3

    a=13 x=4

    a=16 x=5

    a=19 x=6

    a=22 x=7

    a=25 x=8
    a=28 x=9
    a=31 x=10
    a=34 x=11
    a=37 x=12
    a=40 x=13


    Как видим, x — любое число от 1 и больше, число "а" не любое, начинается с 4… a+3.
    Таким образом нужно доказать что в ряду чисел "а" всегда встретится четное число, при любом начальном значении "а". Это элементарно: сложение двух нечетных чисел дает четное число, сложение четного и нечетного (в данном случае 3) дает нечетное, таким образом в данном ряду чередуются четные и нечетные числа. Таким образом гипотеза верна. ;)


  1. skyline48
    08.01.2020 13:22

    Здравствуйте, я нашел ответ, это 3


  1. Alekseyz
    08.01.2020 13:22

    А в чем заключается проблема гипотезы? Ее надо обязательно доказать или опровергнуть?


    1. mayorovp
      08.01.2020 14:58
      +1

      Вообще-то да :-)


  1. Amor-roma
    08.01.2020 13:57
    -1

    Достаточно доказать что простые числа сходятся к 1 по условиям задачи.
    Задача о том имеются ли локальные карманы в которых возможен цикл (не включающий 1).
    Понимаю что не возможен но доказать не могу)
    Сколько будет 0.5 + 0.5
    Нутром чую литра, но доказать не могу ©


    1. edo1h
      08.01.2020 14:11
      +1

      Достаточно доказать что простые числа сходятся к 1 по условиям задачи.

      почему?


      1. gecube
        08.01.2020 14:17

        Потому что в результате постоянного деления честного числа на 2 мы придем к нечетному? А оно может оказаться простым? А вообще — соглашусь, это не прям очевидно )


  1. ZuOverture
    08.01.2020 16:02

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


  1. axi1
    08.01.2020 19:57
    +5


    1. Mad__Max
      11.01.2020 01:50

      Напомнило «спираль смерти» у муравьев.
      image

      Причем как по виду, так и по смыслу.


  1. vics001
    08.01.2020 20:30
    +1

    Возможно — глупый вариант.
    Достаточно, доказать, что для любого числа найдется через N > 0 шагов число, меньшее этого числа. Тогда можно выстроить бесконечно строго убывающую последовательность — противоречие.
    1) Для четных чисел, очевидно следующее уже строго меньше из-за деления на 2.
    2) Для чисел c остатком 1 по модулю 4, число через 1 равно (3a + 1 ) / 4 < a (если a > 1).
    3) Для чисел с остатком 3 (от 4), надо продолжить поиск…


    1. vics001
      08.01.2020 21:17
      +1

      В принципе, можно проверять только числа с остатком 7, 11 и 15 по mod 16. Как только, число становится меньше себя, проверку можно останавливать. Написав простейший скрипт, я получил максимальную длину умножений (=37) на 3 у числа 27, дальше это число умножений не превышает даже 16.

      Если подходить формально к доказательству, то надо просматривать все остатки от деления на 2^N. Если мы нашли для 16 остатки (7, 11, 15), то можно посмотреть 32 и отсеять что-то из (7, 11, 15, 23, 28, 31). Очевидно, что при длине умножений 30, надо рассматривать все остатки от деления на 2^30.


  1. Darth_Biomech
    09.01.2020 06:12

    Я бесконечно далек от математики, поэтому не понимаю одной вещи — как можно доказать такую задачу? Ведь для любого количества проверенных числел х всегда будет вероятность что x+1 — опровергнет. Т.е. сколько бы ты не проверил, впереди ещё бесконечность числел среди которых может быть опровергающее. Она никогда не будет доказана.


    1. mayorovp
      09.01.2020 06:26

      Как как, математически её доказать можно. Вывести следствие из известных аксиом.


    1. Deosis
      09.01.2020 09:47

      Доказательства в основном делятся на 2 типа:


      • По индукции: доказывается, что верно для небольших чисел (база), а потом доказывается, что если верно для первых х чисел, то верно и для х+1 (шаг)
      • От противного: Предположим, что существует х, для которого гипотеза не выполняется, и через несколько верных утверждений приходим к противоречию.

      Доказательства других видов встречаются реже.