Finding Perfect Squares

This guide demonstrates how to determine if an integer is a perfect square using RhinoScript.

Problem

In mathematics, a perfect square is an integer that is the square of an integer; in other words, it is the product of some integer with itself. For example, 9 is a perfect square, since it can be written as 3 × 3. How can one determine whether or not an integer is a perfect square in RhinoScript?

Solution

Here is an example of a function that determines whether or not a number is a perfect square:

Function IsPerfectSquare(n)

  Dim h, t

  IsPerfectSquare = False ' default return value

  h = n And &HF ' last hexadecimal "digit"
  If (h > 9) Then Exit Function ' return immediately in 6 cases out of 16

  If (h <> 2 And h <> 3 And h <> 5 And h <> 6 And h <> 7 And h <> 8) Then
    t = Int(Rhino.Floor(Sqr(n)+0.5))
    If (t*t = n) Then IsPerfectSquare = True
  End If

End Function

You can test the above function as follows:

For i = 0 To 60^2
  If IsPerfectSquare(i) Then
    Call Rhino.Print(CStr(i) & "^2 = " & CStr(i^2))
  End If
Next