26 lines
297 B
Go
26 lines
297 B
Go
package q69
|
|
|
|
func mySqrt(x int) int {
|
|
if x < 2 {
|
|
return x
|
|
}
|
|
l, r := 0, x/2+1
|
|
for l < r {
|
|
m := (l + r) / 2
|
|
sq := m * m
|
|
switch {
|
|
case sq == x:
|
|
return m
|
|
case sq < x:
|
|
if (m+1)*(m+1) > x {
|
|
return m
|
|
}
|
|
l = m + 1
|
|
case sq > x:
|
|
r = m
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
var _ = mySqrt
|