sqchk.py

#!/usr/bin/env python
#
# Check for square numbers
#
# Author:  Yotam Medini  [email protected] -- Created: 2005/December/11
#

import sys

def usage_exit(a0, rc):
    sys.stderr.write(
"""
Usage:
  %s <N1> ... <Nn>

Where:
  <Ni>  Integer numbers to check for being squares
""" % a0)
    sys.exit(rc)


def isqrt(n):
    m = 0
    M = n + 1
    error = M - m
    progress = True
    while progress:
        x = (m + M)/2
        xSquare = x * x
        if xSquare == n:
            progress = False
        else:
            if xSquare < n:
                m = x
            else:
                M = x
            new_error = M - m
            progress = (new_error < error)
            error = new_error
    return x


def isSquare(n):
    r = isqrt(n)
    return (r*r == n)


# Begin program
if len(sys.argv) == 1:
    usage_exit(sys.argv[0], 1)
args_after_1st = sys.argv[1:]
for arg in args_after_1st:
    n = int(arg)
    sys.stdout.write("%5d is " % n)
    if not isSquare(n):
        sys.stdout.write("Not ")
    sys.stdout.write("square\n")
sys.exit(0)


Generated by GNU enscript 1.6.4.