Пожалуйста, подпишитесь на официальный канал Codeforces в Telegram по ссылке https://t.me/codeforces_official. ×

Блог пользователя Bch

Автор Bch, история, 6 лет назад, По-русски

Добрый день! Столкнулся с проблемой, что если нам нужно число a возвести в степень p, которая очень большая, то мы не можем брать показатель степень по данному нам простому модулю mod, это просто неправильно. В одной задаче мне нужно было вначале вычислить степень, в которую я буду возводить, а потом уже соответственно возводить, и на ограничениях, на которых показатель степени не нужно брать по модулю(он меньше 1е9 + 7) у меня AC, но на бОльших ограничениях, где уже нужно показатель степень брать по модулю у меня WA. Я подумал над малой теоремой Ферма и решил, что если брать показатель степени p по модулю (m — 1) то при дальнейшем возведение в степень ответ будет корректный, строгого доказательства у меня не было, но это вроде работало, но я получил WA(видимо раз модуль по которому мы берём уже не простой, то и неправильно). И я решил спросить: если какой-то способ считать показатель степень по данному нам простому модулю, а не записывать его длинной арифметикой?

  • Проголосовать: нравится
  • -10
  • Проголосовать: не нравится

»
6 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
  • »
    »
    6 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    Функция эйлера для простого числа mod равна mod — 1. Получается надо считать показатель степени p по модулю (mod — 1) так? Просто в этой задаче ещё нужно разделить по модулю, ну то есть умножить на число в степени mod — 2, но если мы как mod берём функцию эйлера, то есть 1e9 + 6, то ничего не получится, потому что 1e9 + 6 не простое и МТФ не будет работать.

    • »
      »
      »
      6 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится

      тогда не знаю((

    • »
      »
      »
      6 лет назад, # ^ |
      Rev. 4   Проголосовать: нравится +3 Проголосовать: не нравится

      МТФ то не работает, но тебе дали ссылку на теорему, которая работает. Обратные числа по непростому модулю вполне себе существуют, просто не всегда (когда число взаимнопросто с модулем , а 10^9 +6 имеет всего два простых делителя).

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

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

      • »
        »
        »
        »
        6 лет назад, # ^ |
          Проголосовать: нравится -16 Проголосовать: не нравится

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

    • »
      »
      »
      6 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      — простое

      В чем проблема?

      • »
        »
        »
        »
        6 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

        Видимо, в том, что ему нужно делить показатель степени по модулю m-1 (не простому) — в общем случае не особо решаемая задача (если делим на необратимое)

        • »
          »
          »
          »
          »
          6 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

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

          • »
            »
            »
            »
            »
            »
            6 лет назад, # ^ |
            Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

            А. Ну если происходит только деление и умножение на целые, то моё решение работает. После контеста можешь спросить — объясню подробнее. Теоремы Эйлера тебе хватит.

            • »
              »
              »
              »
              »
              »
              »
              6 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              Окей, спасибо, контест ещё 9 дней будет идти, но потом обсудим!

              • »
                »
                »
                »
                »
                »
                »
                »
                6 лет назад, # ^ |
                  Проголосовать: нравится +52 Проголосовать: не нравится

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