https://leetcode.com/problems/perfect-number | Easy |
---|
Дано целое число num. Нужно вернуть true, если num является совершенным числом, и false в противном случае. Число называется совершенным, если оно равно сумме всех своих делителей, кроме самого себя.
Input:
num = 28Output:
trueExplanation:
Делители числа 28 (кроме самого числа): 1, 2, 4, 7, 14. Их сумма равна 28, следовательно, число является совершенным.
Input:
num = 7Output:
false
fun checkPerfectNumber(num: Int): Boolean {
if (num <= 1) return false // Число 1 и отрицательные числа не могут быть совершенными
var sum = 1 // Начинаем с 1, так как это делитель для всех положительных чисел
var i = 2
// Находим делители до квадратного корня из числа без использования Math.sqrt
while (i * i <= num) {
if (num % i == 0) {
sum += i // Добавляем делитель
if (i != num / i) {
sum += num / i // Добавляем соответствующий парный делитель, если он отличается
}
}
i++
}
return sum == num // Проверяем, равна ли сумма делителей самому числу
}
O(√n), так как мы проверяем делители до квадратного корня num.
O(1), так как используется только фиксированное количество дополнительных переменных.