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

Но что, если мы будем прыгать не на одну клетку, а на очередную разницу между простыми числами - вначале 1 (3-2), потом 2 (5-3), снова 2 (7-5), потом 4 (11-7) итд. А вот направление мы будем 'вращать', например, для плоскости это будет вверх-вправо-вниз-влево? Будет очень красиво.

Сразу скажу, я хотел сотворить что-то красивое с простыми числами с 24 февраля. Это помогало мне не сойти с ума и не выпилиться. Эти эксперименты отвлекали меня, и хорошо, что вначале ничего красивого не получалось - я пробовал и нечто, похожее на игру Жизнь, и треугольник Паскаля, и связь простых чисел и похожих на них lucky numbers... Так что только недавно я получил результат, который меня устроил.

1302 шага, достигнуто простое число 10687
1302 шага, достигнуто простое число 10687

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

шагов: 56873, достигнуто простое: 704357
шагов: 56873, достигнуто простое: 704357

Давайте еще дальше:

шаг: 794673 достигнуто 12108319
шаг: 794673 достигнуто 12108319

Здесь видно, как ведет себя граф: топтание на месте, резкий скачок из-за большого prime number gap. Поехали дальше:

шаг 5'012'197 достигнуто 86'251'189
шаг 5'012'197 достигнуто 86'251'189

А что будет, если мы сделаем то же самое для 3d?

3D: шагов 35'778'763 достигнуто 690'345'077
3D: шагов 35'778'763 достигнуто 690'345'077

(вид со стороны XY). Внешне все выглядит примерно также. И это не удивительно, если мы не показываем ось Z, то все сводится к плоскому варианту, в котором мы просто пропускаем некоторые шаги. Конечно, если бы размер gap как-то коррелировал бы с номером шага mod 6, то изменения были бы, но гипотеза Римана говорит, что простые числа ведут себя наиболее 'случайным' образом, и такой корреляции не должно быть.

Секундочку, для броуновского движения 2D и 3D случаю различаются принципиально (по вероятности возвращения в данную точку), а с простыми получаются нет разницы от числа измерений? А как с возвращением в точку (0,0)?

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

Миллиард шагов (X), достигнуто простое 22'777'909'477
Миллиард шагов (X), достигнуто простое 22'777'909'477

За исключением 1D, где имеет тенденция касания нуля, остальные графики ведут себя схожим образом, что неудивительно, учитывая что gap все время растет, не говоря о больших выбросах, так что хорошей 'компенсации' плюсов и минусов, как это происходит при броуновском движении, нет (хотя выделенного направления роста, если справедлива гипотеза Римана, тоже быть не может). Сравним с подобным графиками для броуновского движения (конечно, в отличие от детерминированных графиков 'простых блужданий' здесь могут быть разные картины в зависимости от random seed):

Броуновское движение в пространстве разных размерностей
Броуновское движение в пространстве разных размерностей

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

Ну и в заключение, насколько далеко я могу продолжить расчет? Я достиг на ноутбуке 383'470'718 шагов с матрицей 600'000x600'000 клеток, упакованных в биты, прежде чем блуждание 'вывалилось' за пределы матрицы.

UPD: Кроме того, можно присваивать цвет на основе того, в какой момент производилось рисование (в зависимости от номера шага):

3548584 шагов
3548584 шагов

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


  1. Hrodvitnir
    21.04.2022 12:28

    Выглядит похожим на различные туманности:)


  1. PrinceKorwin
    21.04.2022 12:52
    +2

    Выглядит похожим на процедурную генерацию подземелий :)


  1. MVN63
    21.04.2022 13:52

    Очепяточка:
    движение в пространсТве разных размерностей


  1. addewyd
    21.04.2022 14:40

    Внешне напоминает кривую дракона.


  1. ku4in
    21.04.2022 16:29

    Было бы любопытно услышать пару слов про используемые инструменты и время расчета.


    1. Tzimie Автор
      21.04.2022 16:30

      На питоне я писал, благо там целые неограниченной длины. Конечно, не самый быстрый язык, но я не торопился. Самый последний расчет шел 16 часов. Все остальное быстрее.


      1. ku4in
        21.04.2022 16:55

        Спасибо. Да, Питончик в этом плане - вещь очень удобная.


  1. amarao
    21.04.2022 16:44
    +1

    Спасибо!

    У меня есть карманный пет-проект на rust, equart (брутфорс relations на 2d плоскости). Смотреть там особо нечего, потому что я на нём учу Rust; но идея офигенная.

    Я её себе в закладочки взял и попробую сделать, как время получится. С уравнениями мне удалось выйти на ~5 fps на пересёт 4k картинки, тут - аж интересно.

    А какой у вас самый большой размер int'а получился? u128 или больше?


    1. Tzimie Автор
      22.04.2022 13:55

      Нет, 77 миллиардов, чуть чуть вышел за uint32

      Кстати в конце добавил еще картинку (UPD: ...)


  1. stanislavshwartsman
    22.04.2022 07:18
    +1

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


    1. Tzimie Автор
      22.04.2022 07:24

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


    1. Tzimie Автор
      22.04.2022 13:55

      Кстати в конце добавил еще картинку (UPD: ...)


  1. belch84
    22.04.2022 21:21
    +2

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

    image

    Модель для броуновского движения
    image


  1. Bronx
    24.04.2022 09:29

    Интересно, спасибо.


    Выполняется ли для этого движения закон Эйнштейна (матожидание квадрата проекции смещения на любую ось пропорционально времени)?