67 lines
3.0 KiB
Markdown
67 lines
3.0 KiB
Markdown
![]() |
---
|
|||
|
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
|
|||
|
```
|