Senior
35
Math.sqrt қолданбай, isPerfectSquare-ты қалай жүзеге асыруға болады? Баламалы тәсілдер.
Сұралған компаниялар
ЦифровыеПривычки
AI-дан жауап
sobes.tech AI
Чтобы проверить, является ли число совершенным квадратом без использования Math.sqrt, можно применить несколько альтернативных подходов:
- Бинарный поиск:
- Идея: искать целое число
x, такое чтоx * x == num. - Реализация: установить границы от 0 до num, и сужать диапазон, сравнивая квадрат среднего элемента с num.
- Идея: искать целое число
public boolean isPerfectSquare(int num) {
if (num < 0) return false;
int left = 0, right = num;
while (left <= right) {
int mid = left + (right - left) / 2;
long sq = (long) mid * mid;
if (sq == num) return true;
else if (sq < num) left = mid + 1;
else right = mid - 1;
}
return false;
}
- Метод вычитания последовательных нечетных чисел:
- Теоретически, сумма последовательных нечетных чисел равна квадрату числа.
- Вычитаем из num последовательно 1, 3, 5, 7... пока num не станет 0 (совершенный квадрат) или отрицательным (не квадрат).
public boolean isPerfectSquare(int num) {
if (num < 0) return false;
int i = 1;
while (num > 0) {
num -= i;
i += 2;
}
return num == 0;
}
- Использование методов приближенного вычисления корня (например, метод Ньютона), но без Math.sqrt:
- Можно реализовать итеративный метод для вычисления корня и проверить, является ли результат целым.
Эти подходы позволяют обойтись без стандартной функции Math.sqrt, при этом сохраняя эффективность и точность.