Есть задача в которой нужно посчитать некоторое значение выражения: ((kn + k^(n/2+n%2))/2)%109. Как это посчитать при ограничениях (1 ≤ n, k ≤ 109)?
Есть задача в которой нужно посчитать некоторое значение выражения: ((kn + k^(n/2+n%2))/2)%109. Как это посчитать при ограничениях (1 ≤ n, k ≤ 109)?
| № | Пользователь | Рейтинг |
|---|---|---|
| 1 | Benq | 3676 |
| 2 | Kevin114514 | 3659 |
| 3 | jiangly | 3640 |
| 4 | turmax | 3450 |
| 5 | tourist | 3408 |
| 6 | strapple | 3360 |
| 7 | Um_nik | 3354 |
| 8 | squareOf105 | 3348 |
| 9 | maroonrk | 3312 |
| 10 | idontwannadothis…e | 3191 |
| Страны | Города | Организации | Всё → |
| № | Пользователь | Вклад |
|---|---|---|
| 1 | Qingyu | 154 |
| 2 | nik_exists | 151 |
| 3 | maspy | 149 |
| 4 | AmShZ | 146 |
| 5 | Um_nik | 143 |
| 6 | Errichto | 139 |
| 7 | BledDest | 136 |
| 8 | adamant | 135 |
| 9 | maroonrk | 133 |
| 10 | cry | 130 |
| Название |
|---|



http://e-maxx.ru/algo/binary_pow
Нужно делить на 2 по модулю который не взаимно простой с 2-ой.
А, я гоню, да
можно посчитать значение выражения без деления на 2 по модулю 2*10^9, а потом уже разделить.
а в конце "тупо" делить на 2, или что нужно еще применять?
Меня это бесит. Люди минусуют пост чтобы он ушел с прямого эфира, хотя никто не может написать как решать эту задачу...
Дайте ссылку на задачу, может можно избавиться от деления на 2.
Меня это бесит. Нерейтинговые постят детские задачи в прямом эфире.
Да, на счет задачи, что мешает домножить отдельно на нужную степень двойки или считать все по модулю 2M, как написано ниже.
О, великий программист нашелся...
Где?
Разложим 10^9 на простые множители. Решим это сравнение по каждому из взаимно-простых модулей, а дальше воспользуемся КТО.
Ясно, что интересен только случай, когда рассматриваемый модуль — 2(2 входит в первой степени в разложении на простые 10^9). Но тогда в этом случае нам надо лишь найти ((k^n + k^(n/2+n%2)) по модулю 4, что сделать весьма просто.
BTW, 2 входит в 9 степени.
А я правильно понимаю, что (X / 2) % M = (X % (2*M)) / 2 ?
Посчитать по модулю 2·109, поделить результат на 2.
А почему это правильно?
Пусть мы посчитали 2x по модулю 2m, тогда мы знаем, что 2x = 2mq + r, где 0 ≤ r < 2m. Поделим всё на 2, получим x = mq + r / 2, 0 ≤ r / 2 < m, а это и означает, что остаток при делении x на m равен r / 2.