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

Поделиться
HTML-код
  • Опубликовано: 24 апр 2020
  • Базовый алгоритм реализации длинной арифметики.
    bigint: github.com/Number571/C/blob/m...
  • НаукаНаука

Комментарии • 23

  • @modeck5844
    @modeck5844 4 года назад +10

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

  • @natashaslife949
    @natashaslife949 4 года назад +2

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

    • @CryptoFunIT
      @CryptoFunIT  4 года назад +4

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

  • @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 Ага, всё, теперь понятно. Спасибо за видеоуроки

  • @pavelevdokimov4018
    @pavelevdokimov4018 3 года назад +3

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

    • @linecodelinecode8261
      @linecodelinecode8261 3 года назад

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

  • @ostrov11
    @ostrov11 4 года назад

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

    • @CryptoFunIT
      @CryptoFunIT  4 года назад +4

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

    • @ostrov11
      @ostrov11 4 года назад +1

      @@CryptoFunIT ок спс ))

    • @rubiks7196
      @rubiks7196 4 года назад +2

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

    • @prade9877
      @prade9877 3 года назад +1

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

    • @serega1103cpp
      @serega1103cpp 3 года назад +1

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

  • @a.osethkin55
    @a.osethkin55 2 года назад +2

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

    • @user-my6zq6tm2r
      @user-my6zq6tm2r 10 месяцев назад

      +

    • @user-st4fi8yp6c
      @user-st4fi8yp6c 5 месяцев назад

      видос был бы тогда на 10+ часов)

    • @a.osethkin55
      @a.osethkin55 5 месяцев назад

      @@user-st4fi8yp6c это как сделать, как подготовиться к видео, не обязательно всё разжевывать

  • @sdfsdf4657
    @sdfsdf4657 3 года назад

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

    • @serega1103cpp
      @serega1103cpp 3 года назад +1

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