iroot.py

#!/usr/bin/env python
#
# Computer integer part of root of a number.
#

import sys


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

Where:
  <m>   Integer number to get root from
  <n>   Integer number which is the order of the root to get.
""" % a0)
    sys.exit(rc)


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


# Begin program
if len(sys.argv) != 3:
    usage_exit(sys.argv[0], 1)
m = int(sys.argv[1])
n = int(sys.argv[2])
r = iroot(m, n)
sys.stdout.write("IntegerRoot[%d](%d) = %d\n" % (n, m, r))

sys.exit(0)

Generated by GNU enscript 1.6.4.