is_perfect_square.rb 613 B

1234567891011121314151617181920212223242526272829303132333435
  1. #!/usr/bin/ruby
  2. # Determine if a number is a perfect square, using the binary search algorithm.
  3. # See also:
  4. # https://en.wikipedia.org/wiki/Square_number
  5. def is_perfect_square(n)
  6. return false if (n <= 0)
  7. return true if (n == 1)
  8. left = 1
  9. right = n>>1
  10. while (left <= right)
  11. middle = (left+right)>>1
  12. square = middle*middle
  13. if (square == n)
  14. return true
  15. elsif (square < n)
  16. left = middle+1
  17. else
  18. right = middle-1
  19. end
  20. end
  21. return false
  22. end
  23. for n in (1..100)
  24. puts n if is_perfect_square(n)
  25. end