Здравствуйте. Может кто знает как можно посчитать функцию Ейлера для всех i, 1 <= i <= n за время O(n)?
Здравствуйте. Может кто знает как можно посчитать функцию Ейлера для всех i, 1 <= i <= n за время O(n)?
| № | Пользователь | Рейтинг |
|---|---|---|
| 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 | 135 |
| 9 | maroonrk | 132 |
| 10 | cry | 130 |
| Название |
|---|



кстати задача с идущего контеста...
Мне эта задача попалась на сайте spoj.pl
Могу посоветовать только http://e-maxx.ru/algo/prime_sieve_linear. Попробуй во время построения решета тащить еще функцию Эйлера. Если числа различаются на 1 простой множитель. пересчитать ее не составит труда.
Можно за
Спасибо, но такая сложность получит TLE. Поэтому мне нужна линия.
А можно узнать, что за задача?
http://www.spoj.pl/problems/GCDEX/
Ну я ее сдавал подобным подходом, только считал для каждого числа его минимальный делитель, а на основании этой информации считал уже функцию Эйлера.
Не верю в то, что там где пройдёт линия не пройдёт N * Log N. Логарифм по основанию E = 2.71...
Кажется, асимптотика чуть лучше... (см. по этой же ссылке)
Оффтоп: не могли бы исправить Ейлера на Эйлера?
вроде, нахождение делителей за О(n) работает дольше, чем обычное решето
Ну когда я в последний раз писал и правда получилось немного дольше. На 107 обычное решение работало 200, а за O(n) где-то 300. Но вроде автору хотелось решения за O(n) :-) А если нужно просто сдать задачу, то можно с хаками написать обычное решето и сдать
По-моему, если MINDidx входит в idx в степени == 1, то phi(idx) = phi(idx / MINDidx) * (MINDidx — 1), иначе phi(idx) = phi(idx / MINDidx) * MINDidx.
Ага поправил