Чарльз Ма уже предлагает выполнить бинарный поиск, который потребует всего 64 итерации (занимает время журнала, а квадратный корень должен быть <= 64 бит, так как результат не укладывается в 128 бит). </p>
Вы можете ускорить его, найдя первый бит i
, установленный на вашем входе, и тогда вы узнаете, что первый бит, установленный в вашем результате, должен быть i/2
. Поэтому при выполнении бинарного поиска вы можете ограничить интервал от i
до i*2-1
. Это может еще больше сократить количество ваших итераций.
Бинарный поиск действительно прост: вы начинаете с интервала, проверяете в середине его, является ли квадрат среднего элемента вашим вводом. Если это так, остановите и выведите его как root, иначе, в зависимости от того, было ли оно маленьким или большим, повторите с новым интервалом (старый минимум, средний) или (средний, старый максимум) . (Существует множество источников о бинарном поиске, я думаю, мне не нужно подробно здесь рассказывать об этом)