3.0 KiB
id, title, challengeType, forumTopicId, dashedName
| id | title | challengeType | forumTopicId | dashedName |
|---|---|---|---|---|
| 5900f46d1000cf542c50ff7f | Завдання 255: Округлені квадратні корені | 1 | 301903 | problem-255-rounded-square-roots |
--description--
Визначаємо округлений квадратний корінь додатного цілого числа n як квадратний корінь n округлених до найближчого цілого числа.
За допомогою наступної дії (по суті це метод Герона, адаптований до цілочислової арифметики) знаходимо округлений квадратний корінь з n:
Нехай d — кількість цифр числа n.
Якщо d непарне число, x_0 = 2 × {10}^{\frac{d - 1}{2}}.
Якщо d парне, x_0 = 7 × {10}^{\frac{d - 2}{2}}.
Повторюємо дію:
x_{k + 1} = \left\lfloor\frac{x_k + \left\lceil\frac{n}{x_k}\right\rceil}{2}\right\rfloor
поки не досягнемо x_{k + 1} = x_k.
Як приклад, знайдемо округлений квадратний корінь n = 4321.
n складається з 4 цифр, тож x_0 = 7 × {10}^{\frac{4-2}{2}} = 70.
$$x_1 = \left\lfloor\frac{70 + \left\lceil\frac{4321}{70}\right\rceil}{2}\right\rfloor = 66 \\ x_2 = \left\lfloor\frac{66 + \left\lceil\frac{4321}{66}\right\rceil}{2}\right\rfloor = 66$$
Оскільки x_2 = x_1, тут зупиняємося. Таким чином, після всього двох ітерацій, ми виявили, що округлений квадратний корінь 4321 дорівнює 66 (точне значення квадратного кореня — 65,7343137...).
Кількість ітерацій, необхідних при використанні цього методу, на диво низька. Наприклад, ми можемо знайти округлений квадратний корінь 5-значного цілого (10\\,000 ≤ n ≤ 99\\,999) в середньому за 3,21028889 ітерацій (середнє значення округлено до 10 знаків після коми).
Використовуючи описану вище дію, яким є середнє число ітерацій, необхідне для знаходження округленого квадратного кореня 14-значного числа ({10}^{13} ≤ n < {10}^{14})? Округліть відповідь до 10 знаків після коми.
Примітка: Символи ⌊x⌋ та ⌈x⌉ позначають функцію підлоги та стелі відповідно.
--hints--
roundedSquareRoots() має повернутися як 4.447401118.
assert.strictEqual(roundedSquareRoots(), 4.447401118);
--seed--
--seed-contents--
function roundedSquareRoots() {
return true;
}
roundedSquareRoots();
--solutions--
// solution required