Как определить идеальный квадрат на ruby?

Идеальный квадрат это целое число, квадратный корень которого является целым числом.
С помощью этого проверяю, является ли число числом Фибоначчи:

def perf_square x
   return x == Math.sqrt(x) ** 2
end
perf_square(5 * (num ** 2) + 4) || perf_square(5 * (num ** 2) - 4) ? "IsFibo" : "IsNotFibo"


Когда число num небольшое проблем не возникает, но с большими числами проверку на "идеальность" квадрат не проходит.

Возможно ли решить задачу по нахождению идеального квадрата на руби? Если да, то в какую сторону копать?
  • Вопрос задан
  • 3493 просмотра
Решения вопроса 1
jj_killer
@jj_killer
def perf_square x
  Math.sqrt(x).to_r.denominator == 1
end
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
def is_perf_quare x
    return Math.sqrt(x).is_a? Integer
end

Не?
Ответ написан
demolishka
@demolishka
Лучше всего посчитать целую часть квадратного корня с помощью двоичного поиска.
l=0;
r=n;
while (r-l)>1
{
m = (l+r) div 2;
if m*m <= x then l = m else r = m - 1;
}
return l;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы