Здравствуйте. Может кто знает как можно посчитать функцию Ейлера для всех i, 1 <= i <= n за время O(n)?
| № | Пользователь | Рейтинг |
|---|---|---|
| 1 | Benq | 3792 |
| 2 | VivaciousAubergine | 3647 |
| 3 | Kevin114514 | 3603 |
| 4 | jiangly | 3583 |
| 5 | strapple | 3515 |
| 6 | tourist | 3470 |
| 7 | dXqwq | 3436 |
| 8 | Radewoosh | 3415 |
| 9 | Otomachi_Una | 3413 |
| 10 | Um_nik | 3376 |
| Страны | Города | Организации | Всё → |
| № | Пользователь | Вклад |
|---|---|---|
| 1 | Qingyu | 157 |
| 2 | adamant | 153 |
| 3 | Um_nik | 146 |
| 3 | Proof_by_QED | 146 |
| 5 | Dominater069 | 145 |
| 6 | errorgorn | 141 |
| 7 | cry | 139 |
| 8 | YuukiS | 135 |
| 9 | TheScrasse | 134 |
| 10 | chromate00 | 133 |
Здравствуйте. Может кто знает как можно посчитать функцию Ейлера для всех i, 1 <= i <= n за время O(n)?
| Название |
|---|



кстати задача с идущего контеста...
Мне эта задача попалась на сайте 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.
Ага поправил