Files
2022-04-11 19:34:39 +05:30

3.0 KiB
Raw Permalink Blame History

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