Добрый день, Codeforces!
Меня интересует, умеет ли кто-нибудь считать такую сумму
. Или такую сумму (они друг через друга выражаются)
(деление целочисленное).
Буду очень признателен любым методам подсчета быстрее чем линия (или около-линия).
Добрый день, Codeforces!
Меня интересует, умеет ли кто-нибудь считать такую сумму
. Или такую сумму (они друг через друга выражаются)
(деление целочисленное).
Буду очень признателен любым методам подсчета быстрее чем линия (или около-линия).
| № | Пользователь | Рейтинг |
|---|---|---|
| 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 | 155 |
| 2 | nik_exists | 151 |
| 3 | maspy | 149 |
| 4 | AmShZ | 145 |
| 5 | Um_nik | 143 |
| 6 | Errichto | 139 |
| 7 | BledDest | 136 |
| 8 | adamant | 134 |
| 9 | maroonrk | 132 |
| 10 | cry | 130 |
| Название |
|---|



Правильно понимаю, что модуль находится под суммой?
Да, правильно. Иначе тривиал =)
Дак модуль суммы равен сумме модулей же)
К.О.
Я не силен в математике, но разве по правилам не надо левую часть всю тоже по модулю взять? Тогда ведь все получается.
К.О. Так в условии этого mod нету, вот в чём прикол.
И вся сумма модулей берется по модулю, так что мы недалеко ушли.
ага)
Гер, скачай разбор отсюда. Задача aladin.
O(n), где n — размер модуля. Или это тоже имелось ввиду под линией?
Да это тоже слишком долго.
Вот в этой статье в разделе 3 эта сумма считается за
.
Получается x*b+a*((x*(x-1)/2) (mod n). Но это слишком просто, чтобы писать пост; что я понял не так? :) upd: упс, надо было читать комментарии перед написанием своего.
как я понял, фича в том, что мы берем по модулю каждое слагаемое, но не берем сумму
На онсайте Opencup'а летом 2011 года была задача — посчитать количество целых точек в прямоугольном треугольнике. И решалась она за
. Эта задача достаточно просто к ней сводится. Алгоритм решения примерно тот же самый, что и алгоритм из статьи из комментария выше.
Коротко, и по русски ^_^
Научимся решать задачу для случая, когда a>=b.
Есть такое k, что a=k*b+c, где c<b.
Ответ, следовательно — [(k*b+c)/b]+[2(k*b+c)/b]+[3(k*b+c)/b]...+[n(k*b+c)/b].
Где [x] — то же самое, что и trunc(x).
На самом деле ответ состоит из двух частей — k+2k+3k+4k...+nk — это легко посчитать и [c/b]+[2c/b]+[3c/b]...+[nc/b] — это та же задача, только уже с новыми a,b,n.
Чтобы ее решить, просто как-бы мысленно повернем треугольник на 90 градусов и мы получим новые a,b,n для этого повернутого прямоугольника, хотя все равно понятно, что это будет одно и то же.
И эти a,b,n можно получить такими, чтобы выполнялось a>=b и опять решить задачу, которую мы научились решать.
И там еще надо будет немного повозиться с точками лежащими на гипотенузе.
На самом деле, все будет изменяться так же, как и в алгоритме Евклида. Так что мы получим решение за сложность, за которую работает Евклид, то есть за быстро.
Это примерные намеки на решение.
Мой код — решение задачи SPOJ GPINTRI.