An open API service indexing awesome lists of open source software.

https://github.com/filonenkodima/iteam_test_assignment


https://github.com/filonenkodima/iteam_test_assignment

Last synced: 10 months ago
JSON representation

Awesome Lists containing this project

README

          

# Задача

Знайти мінімальну кількість чисел, квадрат яких у сумі дорівнює заданому числу n.

## Демо

![](demo%20img/image1.png)
![](demo%20img/image2.png)

## Встановлення та запуск проєкта

1. Клонування репозиторію:

```bash
git clone https://github.com/FilonenkoDima/EasyTask.git
cd EasyTask
```

2. Встановлення залежностей:

```bash
npm install
```

3. Запуск сервера розробки:

```bash
npm start
```

4. Відкрийте браузер і перейдіть за посиланням:
```
http://localhost:4200
```

## Пояснення алгоритмів

#### Алгоритм 1: sumOfSquares_BFS

Цей алгоритм використовує метод пошуку в ширину (BFS) для обчислення мінімальної кількості квадратів. \

1. Створюється список всіх квадратів, менших або рівних n.
2. Використовується BFS для пошуку мінімальної глибини, на якій можна дійти
до 0, віднімаючи квадрати з поточного значення.
3. Вершини (залишки) додаються в чергу, щоб перевірити всі можливі
комбінації.

Time Complexity: 𝑂 (𝑛 × √𝑛) \
Space Complexity: 𝑂(𝑛): для відвіданих вузлів і черги BFS.


#### Алгоритм 2: sumOfSquares_Lagrange

Цей алгоритм реалізує Теорему Лагранжа про чотири квадрати, яка стверджує,
що будь-яке натуральне число може бути подане як суму чотирьох або менше
квадратів натуральних чисел. На основі цієї теореми алгоритм обчислює
мінімальну кількість квадратів.

1. Перевіряємо, чи є число n повним квадратом. Якщо так — повертаємо 1.
2. Ітеруємо через всі числа до √𝑛​ і перевіряємо, чи різниця n - i^2 є повним квадратом. Якщо так — повертаємо 2.
3. Видаляємо множники 4 з n і перевіряємо, чи залишок після поділу на 8 дорівнює 7. Якщо так — повертаємо 4.
4. У всіх інших випадках повертаємо 3.

Time Complexity: 𝑂 (√𝑛). \
Space Complexity: 𝑂(1): використовуються лише константні додаткові змінні.