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

68 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 5900f46d1000cf542c50ff7f
title: 'Завдання 255: Округлені квадратні корені'
challengeType: 5
forumTopicId: 301903
dashedName: 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`.
```js
assert.strictEqual(roundedSquareRoots(), 4.447401118);
```
# --seed--
## --seed-contents--
```js
function roundedSquareRoots() {
return true;
}
roundedSquareRoots();
```
# --solutions--
```js
// solution required
```