А использовать более оптимальные алгоритмы? Для целого числа очень подойдет разложение в ряд.
1 = 1^2
1 + 3 = 2^2
1 + 3 + 5 = 3^2
1 + 3 + 5 + 7 = 4^2
Замечаете?
Просто вычитаете все нечетные числа начиная с 1. Если остаток меньше следующего нечетного числа, то берете порядковый номер предыдущего нечетного числа. Но это подойдет, если числа не очень большие, хотя ваш алгоритм не лучше в этом отношении.
Ну и как обычно на тостере, поискать видимо лень, поэтому вопросов интересных нет, а вот такая вот фигня.
2 минуты поиска:
algolist.manual.ru/maths/count_fast/intsqrt.php