Возможный дубликат:
Самый быстрый способ определить, является ли квадратный корень целого целым числом
Какой способ увидеть, является ли число идеальным квадратом?
bool IsPerfectSquare(long input)
{
// TODO
}
Я использую С#, но это агностик языка.
Бонусные очки для ясности и простоты (это не значит, что это кодовый гольф).
Изменить: Это намного сложнее, чем я ожидал! Оказывается, проблемы с двойной точностью проявляют себя несколькими способами. Во-первых, Math.Sqrt берет двойной, который не может точно удерживать длинный (спасибо Jon).
Во-вторых, двойная точность потеряет небольшие значения (.000... 00001), когда у вас будет огромный, почти идеальный квадрат. например, моя реализация не прошла этот тест для Math.Pow(10,18) +1 (мой сообщенный true).