Сашко-Конструктор масивів#252

Сашко-Конструктор масивів (Розбір)

Якщо x \le d, відповідь очевидна: масив з одного елемента .

Інакше треба розбити на множники, кожен з яких не перевищує , і зробити це якнайменшою кількістю множників.

Спочатку перевіримо, чи розв'язок узагалі існує. Розкладемо на прості множники. Якщо серед них є простий p > d, то жоден множник добутку не зможе його «сховати» — будь-який елемент масиву, кратний , буде не меншим за p > d. У цьому разі виводимо .

Якщо ж усі прості не перевищують , розв'язок існує, і будувати його вигідно жадібно: щоразу відщипувати від залишку якомога більший множник.

Формально: доки поточне значення більше за , шукаємо найбільший дільник , що не перевищує , додаємо його до відповіді й ділимо на нього. Коли стає не більшим за , додаємо його останнім елементом.

Кожен крок зменшує щонайменше вдвічі (бо взятий дільник не менший за ), тому кроків буде щонайбільше близько при x \le 10^9 — це з великим запасом вкладається в обмеження n \le 1000 з умови.

Дільники зручно шукати одним проходом до \sqrt{x}: для кожного , що ділить , кандидатами є і , і ; серед тих, що не перевищують , беремо найбільший.

Оскільки x \le 10^9, розклад пробними діленнями коштує близько 3 \cdot 10^4 операцій.