手写sqrt()

发布时间 2023-08-08 17:42:24作者: wuyoudexian

当n是完全平方数时,返回它的开方,否则返回-1。

ll sqt(ll n) {
    ll lo = 0, hi = 2 * sqrt(n);
    while(lo < hi) {
        ll mid = lo + hi + 1 >> 1;
        if(mid * mid <= n) {
            lo = mid;
        } else {
            hi = mid - 1;
        }
    }
    return lo * lo == n ? lo : -1;
}