3.0 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5900f46d1000cf542c50ff7f | Завдання 255: Округлені квадратні корені | 5 | 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