К списку задач
Легко Решено: 0 Процент решений: 0%

Классификация числа по его делителям

Классифицируйте положительное целое число как совершенное, избыточное или недостаточное.

Чему вы научитесь

  • Находить все собственные делители числа
  • Ускорять поиск делителей через квадратный корень
  • Классифицировать результаты условиями

Условие

Сложите все положительные делители числа n, которые строго меньше n. Если их сумма равна n, число считается совершенным. Если сумма больше n — избыточным; если меньше — недостаточным. У числа 1 нет собственных положительных делителей, поэтому сумма делителей равна 0.

Реализуйте функцию perfect_number(n).

Ввод

n: Положительное целое число для классификации.

Вывод

Верните perfect, abundant или deficient — в виде строки в нижнем регистре.

Ограничения

1 ≤ n ≤ 1 000 000. Нулевые и отрицательные значения не рассматриваются.

Примеры

Пример 1
Ввод:
n = 18

Ожидаемый вывод:
expected = "abundant"
Ввод:
long long n = 18;

Ожидаемый вывод:
std::string expected = "abundant";
Ввод:
long n = 18;

Ожидаемый вывод:
string expected = "abundant";

Пояснение

Собственные делители: 1, 2, 3, 6 и 9. Их сумма — 21, что больше 18.

Пример 2
Ввод:
n = 28

Ожидаемый вывод:
expected = "perfect"
Ввод:
long long n = 28;

Ожидаемый вывод:
std::string expected = "perfect";
Ввод:
long n = 28;

Ожидаемый вывод:
string expected = "perfect";

Пояснение

Сумма собственных делителей: 1 + 2 + 4 + 7 + 14 = 28, что в точности равно самому числу.

Как подступиться

Сначала попробуйте сами, затем открывайте подсказки по одной.

Подсказка 1

Найдите собственные делители n и сравните их сумму с n, чтобы определить класс.

Подсказка 2

Достаточно искать делители до квадратного корня, сопоставляя каждому делителю его пару.

Подсказка 3

Особо обработайте 1: у него нет собственных положительных делителей, и сумма делителей равна нулю.

Ожидаемая сложность

время O(√n), доп. память O(1)

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.