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

Поделиться
HTML-код
  • Опубликовано: 31 дек 2024

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

  • @Igor-Kor64
    @Igor-Kor64 Год назад +29

    Вообще-то не простая задача. Я честно говоря задымился.

  • @olegpisarenkov4908
    @olegpisarenkov4908 Год назад +12

    надо же озвучить, в чём заключается задача! а то на первый взгляд кажется, что задача - найти значение выражения. А в итоге оказывается, что надо упростить выражение, а не посчитать...

    • @Syd-s1r
      @Syd-s1r Год назад

      Я надеюсь, это рофл

  • @GG_G-G_GG
    @GG_G-G_GG Год назад +1

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

  • @СергейВитальевич-п5с

    1/50! Стремится к нулю, тогда и ответ соответственно стремится к 1

  • @iljamats889
    @iljamats889 Год назад +4

    Спасибо. Всегда полезно потренировать мозг... и вспомнить детство золотое

  • @СергейПанин-в9щ
    @СергейПанин-в9щ Год назад +4

    Учебник Сканави, 4-й уровень сложности..Помню этот пример, решить не смог.

  • @ЧенЧен-ц1ь
    @ЧенЧен-ц1ь Год назад +8

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

    • @alexey_latyshev
      @alexey_latyshev Год назад

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

    • @ЧенЧен-ц1ь
      @ЧенЧен-ц1ь Год назад

      @@alexey_latyshev да легко смогу, буду хранить результат в string (varchar), да придётся написать отдельную функцию в несколько строк.

    • @alexey_latyshev
      @alexey_latyshev Год назад

      @@ЧенЧен-ц1ь неэффективно - больше памяти жрёт, больше операций, постоянные переходы между типами данных. Не изобретайте велосипед - я вам привёл единственно правильное и применяемое на практике решение данной задачи. Эффективней нет.

    • @ЧенЧен-ц1ь
      @ЧенЧен-ц1ь Год назад

      @@alexey_latyshev да ладно, современный CPU это всё сожрёт мгновенно. Сейчас проблема не в производительности CPU. И да, есть методы быстрее, без массивов и пр. хрени.

    • @alexey_latyshev
      @alexey_latyshev Год назад

      @@ЧенЧен-ц1ь да не сожрёт - проблема в типах данных. Вы иначе без погрешности не решите эту задачу. Ну вбейте в лоб и мной приведённым методом и почувствуйте разницу, насколько менее точен будет ответ, если вообще решите.
      Вы вообще представляете себе 50! или нет? Мало того, для программ, рассчитанных для работы с такими числами этот метод и применяется. Операционные системы используют данный метод арифметики, а тут некто в инете говорит, что это всё шляпа и предлагает мало того, что решать рекурсию, засрав память мусором, ибо деструктор внятно применить не сможет, так ещё тратить ещё больше памяти и времени на перевод в строковый тип данных и обратно каждый раз.
      Не изобретайте велосипед - АЛУ и вообще принцип работы арифметики в компьютере уже лет 80 как за нас придумали умные дяди.
      Ну и в довесок. Да даже 5+5 вы думаете компьютер иначе считает? Точно так же, просто это уже всё вшито и добрый компилятор всё за нас делает, поскольку оба числа, как и сумма вписываются в заданный целочисленный тип данных.

  • @slavitenev2577
    @slavitenev2577 11 месяцев назад

    Великолепно. Понягога простите неща изглеждат много сложни.

  • @ouTube20
    @ouTube20 Год назад

    При сложении хотя бы первых трех слагаемых видно, что сумма стремится к единице, а значит сумма всех слагаемых еще больше будет стремится к единице, то есть "один минус бесконечно малая", или ≈1

    • @Okean_Soliaris
      @Okean_Soliaris Год назад

      То, что сумма ряда-продолжения стремится к единице можно, например, сразу увидеть, исходя из того, что это коэффициенты степенного ряда для производной от функции (exp(x)-1)/x

    • @anatolypayuk9246
      @anatolypayuk9246 Год назад

      Это при n стремящемся к бесконечности ряд стремится к 1.

  • @AlexeyEvpalov
    @AlexeyEvpalov Год назад +1

    Спасибо.

  • @vladimirgalichenko5424
    @vladimirgalichenko5424 Год назад

    Хороший ход в числителе 👍 если сразу его сократить можно приехать в стену.

  • @irinabaigozina8551
    @irinabaigozina8551 Год назад

    Классно, спасибо!

  • @Gerserh
    @Gerserh Год назад +3

    Круто! Сходящийся ряд. Правда не помню как доказать сходимость такого ряда

    • @MrGogaren
      @MrGogaren Год назад +3

      Элементарно. Надо сказать волшебную фразу: Очевидно, что ряд сходится🤣

    • @juliusmironoff9133
      @juliusmironoff9133 Год назад +1

      Тут тупо считается предел.

    • @andreydorokhov6084
      @andreydorokhov6084 Год назад

      ​@@juliusmironoff9133в смысле? Поясните

    • @Troyan113
      @Troyan113 Год назад

      ​@@juliusmironoff9133ну предел это необходимое условие, а не достаточное.

    • @Troyan113
      @Troyan113 Год назад +4

      ​@@andreydorokhov6084Тут можно воспользоваться таким свойством bn > an(исходный) и bn - сходится, то an сходится. n! > n^3 при n -> inf получаем 1/n^2 > an, 1/n^2 - гармонический сходящийся ряд

  • @ТАР-ю4ю
    @ТАР-ю4ю Год назад

    Красота

  • @ouTube20
    @ouTube20 Год назад +1

    Волков решал эту задачу проще и быстрее.

  • @GradeGradeZ
    @GradeGradeZ Год назад

    Да. Ресурсов на много меньше.

  • @eduardionovich4425
    @eduardionovich4425 Год назад

    Простая задача. Думаю,что даже автор ролика сам её решил.

  • @hefneryung2783
    @hefneryung2783 Год назад +9

    Я сначала тупо в лоб начал решать и заметил, что если их суммировать по очереди, то знаменатель будет на 1 больше числителя. Можете проверить. И я получил ответ (50!-1)/50!, что равно 1-1/50!.

    • @hefneryung2783
      @hefneryung2783 Год назад

      Знаете если первые несколько раз это случилось, то это случайность, последующие несколько - это потянет на теорию, остальное - закономерность.

    • @КрылоБезруков
      @КрылоБезруков Год назад +1

      @@hefneryung2783 ну по индукции можно было доказать это. так что тоже рабочее решение

  • @ЛарисаТикунова-м2щ

    Спасибо, все интересно и познавательно, но... многие, конечно со мной не соглашаться и все таки ... Можно рассказывать без причмокивания.

  • @slava6105
    @slava6105 Год назад

    Я бы, честно, помедитировал над разностью и, скорее всего, не смог бы это решить

  • @darkghostnt
    @darkghostnt Год назад

    Сейчас загнал в нормальный калькулятор ответ: 1-(1/50!). И получил 1.
    Начал уменьшать знаменатель до числа который калькулятор сможет показать.
    Получилось 1-(1/37!) = 0,(43 штуки 9) и потом другие цифры.

    • @alexey_latyshev
      @alexey_latyshev Год назад

      И это всё ошибка: калькулятор даже в компе не умеет сам по себе решать такие задачи - высокая погрешность вычисления из-за ограничений типа данных.
      Данные задачи решаются побитовой арифметикой, которую надо прописывать вручную, поскольку она используется только системой, а в интерфейсе она не предусмотрена.
      Ручками пишем код, выделяем память под массив, который будет хранить разряды и поразрядно проводить арифметику.
      И лучше использовать аналитическое задание, в не рекуррентное, то есть 1-1/50!, иначе засрёте память и/или намучаетесь с деструкторами.

  • @Mallor998
    @Mallor998 Год назад +8

    Ну прям современному компу проблема посчитать 500 операций умножения? Если программист баран и каждый раз считает факториал по новой, а не запоминает предыдущий что бы посчитать следующий то возможно займет несколько миллисекунд, а если программист в курсе что такой оптимизация, то это даже не смешно. И самое интересное что с точки зрения количества операций, посчитать 50! займет столько же операций что и все факториалы от 1 до 50.

    • @_Spellmaniac_
      @_Spellmaniac_ Год назад +2

      Очевидно вы не программист. Операция деления занимает в несколько раз больше времени процессора, чем умножение. И вы не сможете ее оптимизировать, ведь делитель каждый раз новый. Если в формуле миллион членов, а нужно в реальном времени постоянно вычислять такую формулу, то вы получите нерешаемую задачу.
      ЗЫ. Операция деления больших чисел для компьютера убийственна. Придумайте четное число из 100 знаков и поделите его на 2. Чтобы решить такую задачу на компьютере, придется писать специальную программу.

    • @АнтуанКоновальский
      @АнтуанКоновальский Год назад +1

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

    • @NotaBene-h2n
      @NotaBene-h2n Год назад +1

      1. "Современный комп", конечно, может сосчитать большие факториалы. Пакет Mathematica умеет считать АБСОЛЮТНО точно, например 1000! Т.е. результат выводится в виде целого числа, думает долго.
      2. Для работы с такими числами встроенная компьютерная арифметика непригодна. Максимум, что можно записать в беззнаковое 4-ех байтное целое -- примерно 4 млрд. 300 млн. Этот предел превышается уже для 13!
      3. Это значит, что надо использовать нестандартную арифметику -- специально написанные функции, которые работают гораздо медленнее. Если же оценивать факториалы приблизительно, в виде действительных чисел, то при такой цепочке вычислений накопится большая ошибка.
      4. Проведенное в ролике рассмотрение весьма разумно и эффективно с вычислительной точки зрения. В том числе ещё и потому, что можно легко масштабировать задачу.
      Действовать "пыром", в расчете на мощь компьютеров -- моветон 😁

    • @RAlex061
      @RAlex061 Год назад

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

  • @ОльгаХрамова-ь9ж

    Почитала комментарии, поняла, что я, наверное, плохо в школе училась. Или это не из школьной программы?

    • @napjordysh
      @napjordysh Год назад

      Это реально решить школьнику, т.к все факты и действия в рамках школьной программы

  • @Requial
    @Requial Год назад +3

    Когда уже эти незадачливые «математики» научатся различать понятия «сокращается» и «взаимно уничтожается»? ПОЗОРИЩЕ!

  • @lyubovs2242
    @lyubovs2242 Год назад +2

    Как это вбить в компьютер?😳
    Капец, до чего техника дошла!
    Я не знаю как это в компьютер вбить, а он уже умеет это решать!😃👍

  • @andreydorokhov6084
    @andreydorokhov6084 Год назад

    Рефакторинг, так сказать!

  • @ВасилисаФедорова-л6ш

    2! ха-ха ) Я понимаю, что написано для наглядности сходимости рядов, но 2! это смешно )

  • @ПлатонЛипов
    @ПлатонЛипов Год назад

    Красиво

  • @armanavagyan1876
    @armanavagyan1876 Год назад +2

    💣🧠👍

  • @sacredabdulla5698
    @sacredabdulla5698 Год назад

    очень коварно.

  • @lemagnifique2360
    @lemagnifique2360 Год назад +4

    Правильно нобелевскую премию не дают за математику...придумали хрень и сами не знают зачем...факториалы эти...кому вообще это надо? хоть одну практическую задачу это решает ?!

    • @Borisuperful
      @Borisuperful Год назад

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

    • @aleksgavr6191
      @aleksgavr6191 Год назад +2

      Практические задачи - перестановки, размещения и сочетания, здесь без факториала никак.

    • @lemagnifique2360
      @lemagnifique2360 Год назад

      @@aleksgavr6191 перестановки в квартире? Не понял о чем речь...

    • @aleksgavr6191
      @aleksgavr6191 Год назад +1

      @@lemagnifique2360 да хотя бы перестановки колес на авто, сколько всего существует вариантов?

    • @lemagnifique2360
      @lemagnifique2360 Год назад

      @@aleksgavr6191 не видел чтобы в шиномонтаже кто-то скрипел карандашом вычисляя факториалы при перестановке колёс

  • @ОльгаХрамова-ь9ж

    Что-то я не помню в советских задачах даже слова факториал, не то, чтобы решать это.
    На надо врать

    • @Fedor___1
      @Fedor___1 Год назад +1

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

  • @ivankirillov4327
    @ivankirillov4327 Год назад

    Зачем оптимизировать, если можно взять компьютер помощнее.

  • @RAlex061
    @RAlex061 Год назад

    Умилило, что автор столь забавно отзывается о компьютере: и ресурсов потребуется уйма, и считать долго будет. Даже интересно стало. Потратил пару минут, набросал программку на языке PascalАВС.NЕТ. Для тех самых "жутких" 499. Получил в ответе единицу. А время вычисления составило... внимание! ... 4.6 миллисекунды! Неописуемо много, конечно ))).
    Код для желающих повторить:
    ##
    [Cache]
    function f(n:integer): BigInteger := if n n / f(n + 1)).Sum;
    sw.Stop;
    Println(sw.Elapsed); // время выполнения 00:00:00.0046259 - это 4.6 мс
    r.Print
    Но это, конечно же, не означает, что любые задачи нужно кидаться решать "в лоб". Поэтому, если человек не в ладах с математикой, хорошего программиста из него не получится никогда.