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

Автор edified, 12 лет назад, По-русски

Есть задача в которой нужно посчитать некоторое значение выражения: ((kn + k^(n/2+n%2))/2)%109. Как это посчитать при ограничениях (1 ≤ n, k ≤ 109)?

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

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

    Нужно делить на 2 по модулю который не взаимно простой с 2-ой.

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

      А, я гоню, да

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

      можно посчитать значение выражения без деления на 2 по модулю 2*10^9, а потом уже разделить.

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

        а в конце "тупо" делить на 2, или что нужно еще применять?

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

Меня это бесит. Люди минусуют пост чтобы он ушел с прямого эфира, хотя никто не может написать как решать эту задачу...

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

    Дайте ссылку на задачу, может можно избавиться от деления на 2.

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

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

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

Разложим 10^9 на простые множители. Решим это сравнение по каждому из взаимно-простых модулей, а дальше воспользуемся КТО.

Ясно, что интересен только случай, когда рассматриваемый модуль — 2(2 входит в первой степени в разложении на простые 10^9). Но тогда в этом случае нам надо лишь найти ((k^n + k^(n/2+n%2)) по модулю 4, что сделать весьма просто.

»
12 лет назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится

А я правильно понимаю, что (X / 2) % M = (X % (2*M)) / 2 ?

»
12 лет назад, # |
  Проголосовать: нравится +17 Проголосовать: не нравится

Посчитать по модулю 2·109, поделить результат на 2.

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

    А почему это правильно?

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

      Пусть мы посчитали 2x по модулю 2m, тогда мы знаем, что 2x = 2mq + r, где 0 ≤ r < 2m. Поделим всё на 2, получим x = mq + r / 2, 0 ≤ r / 2 < m, а это и означает, что остаток при делении x на m равен r / 2.