// Алгоритмизация #4 // Длинная арифметика //

Поділитися
Вставка
  • Опубліковано 5 лют 2025
  • Базовый алгоритм реализации длинной арифметики.
    bigint: github.com/Num...

КОМЕНТАРІ • 24

  • @AIKKML
    @AIKKML 2 місяці тому

    21:00 могут ли чанки быть числами в системах счисления не кратных 10, например в системе счисления 256, для более эффективного использования памяти в случае с массивом uint8

  • @modeckrus
    @modeckrus 4 роки тому +11

    нихуя не понятно, но очень интересно. Люблю твои видео

  • @natashaslife949
    @natashaslife949 4 роки тому +2

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

    • @CryptoFunIT
      @CryptoFunIT  4 роки тому +4

      Рассказывать особо не о чем, чтобы делать отдельное для этого видео. Опыт небольшой, чтобы повествовать о каких-либо интересных и забавных случаях. А также нет никаких тайн и скрытых способов обучения, которые являлись бы советами. Всё держится на предельно простой истине - учиться, учиться и ещё раз учиться. Конечно можно было подойти ещё ко всему этому с более философской точки зрения и поставить вопрос, нужно ли обучаться ради обучения, но всё это будет скатываться к субъективности, потому что ситуации бывают разные. Единственное что можно было бы сделать в таком видео - рассказать о научной и технической литературе, которая мне понравилась и которую мог бы я рекомендовать, но частично подобное видео уже было на моём канале, а ещё одно делать, даже в отрыве от криптографии, не слишком хочется.

  • @pavelevdokimov4018
    @pavelevdokimov4018 4 роки тому +3

    Максимвольное число uint16 не равно 65 536, оно равно 65 535, проверьте на калькуляторе windows, заполнив 2 байта в двоичном режиме. Диапазон от 0 до 65 535. И сдвиг 1

    • @linecodelinecode8261
      @linecodelinecode8261 4 роки тому

      Автор об этом прекрасно знает! Смотрите фокус 1

  • @in42u
    @in42u 4 роки тому

    Можешь объяснить, в чём смысл отзеркаливания цифр в числе в чанке (на 43:00, функция swap)?
    Разве мы не сами чанки должны отзеркаливать?

    • @CryptoFunIT
      @CryptoFunIT  4 роки тому

      На примере 43:00 происходит отзеркаливание цифр (символов) в одном чанке. Это необходимо делать по причине того, что считывание символов реализовывается с конца строки (чтобы чанки вносились по порядку). В итоге, существует здесь два вида отзеркаливания: самих чанков (происходит просто при считывании символов справа-налево [поблочно]) и символов в одном чанке (происходит при помощи функции _swap). Логичнее было бы кстати функцию _swap назвать как _reverse, но когда записывал видео не обратил внимание.

    • @in42u
      @in42u 4 роки тому

      @@CryptoFunIT Просто на 20:28 говорилось, что цифры в чанках не переставляются

    • @CryptoFunIT
      @CryptoFunIT  4 роки тому

      @@in42u верно, если бы мы переставили цифры местами, то получилось бы совершенно другое число. Но не стоит забывать, что в теории считывание числа производилось с начала, а не с конца, как в итоговой программе. Вкратце, примерный алгоритм можно представить следующим образом, где MODULO = 1000, а входная строка = "1234567890":
      1) "1234567890" // Считываем строку
      2) "0987654321" // Читаем строку с конца (или же ревёрсим строку)
      3) ["098", "765", "432", "1"] // Разделяем на чанки
      4) ["890", "567", "234", "1"] // Ревёрсим все чанки
      5) [890, 567, 234, 1] // Переводим чанки в целочисленный тип
      В итоговой программе алгоритм представлен немного иным образом, он работает поточно, обрабатывая каждый чанк по отдельности.
      1) "1234567890" // Считываем строку
      _Первая итерация цикла:
      2) "098" // Читаем первый чанк (чтение с конца)
      3) "890" // Ревёрсим чанк
      4) 890 // Переводим чанк в целочисленный тип
      5) Сохраняем чанк в первую ячейку объекта BigInt
      _Вторая итерация цикла:
      2) "765" // Читаем второй чанк (чтение с конца)
      3) "567" // Ревёрсим чанк
      4) 567 // Переводим чанк в целочисленный тип
      5) Сохраняем чанк во вторую ячейку объекта BigInt
      _n-ая итерация цикла:
      ...

    • @in42u
      @in42u 4 роки тому

      @@CryptoFunIT Ага, всё, теперь понятно. Спасибо за видеоуроки

  • @ostrov11
    @ostrov11 4 роки тому

    ...Чувак, этими действиями, какую проблему мы решаем?

    • @CryptoFunIT
      @CryptoFunIT  4 роки тому +4

      Со стороны прикладной сферы никакую, так как уже существуют готовые библиотеки для работы с большими числами куда более оптимизированные, чем предложенный вариант. К тому же, в некоторых языках программирования уже по-умолчанию существует поддержка длинной арифметики (Python, Haskell), либо существует стандартные библиотеки (как например math/big в Go). Подобные видео, связанные с алгоритмами (и криптографией в том числе) представляют из себя более научный интерес, то-есть мы исходим не из цели применения, а из цели обучения.

    • @ostrov11
      @ostrov11 4 роки тому +1

      @@CryptoFunIT ок спс ))

    • @rubiks7196
      @rubiks7196 4 роки тому +2

      Олимпиадникам помощь вот зачем

    • @prade9877
      @prade9877 4 роки тому +1

      @@rubiks7196 тем кто занимается спортпрогой не нужна такая длинная реализация)

    • @serega1103cpp
      @serega1103cpp 3 роки тому +1

      Это самая прикладная задача в мире, которая только может существовать. Решение проблемы длинной арифметики необходимо для устройств с малым количеством памяти на борту. Например, небольшие устройства вроде калькуляторов имеют мало памяти и не позволяют использовать большие типы данных для хранения больших чисел, соответственно все вычисления там производятся изображённым в видео способом.

  • @a.osethkin55
    @a.osethkin55 3 роки тому +2

    А где умножение? деление? степень? Корень? Логарифм? Тетрация?.. ну интересно ведь, а тут просто +/-

  • @sdfsdf4657
    @sdfsdf4657 3 роки тому

    Объясните тупому, зачем нужно записывать число в масив в обратном порядке?

    • @serega1103cpp
      @serega1103cpp 3 роки тому +1

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