division by 7 efficiently ???
BJörn Lindqvist
bjourne at gmail.com
Thu Feb 1 04:22:09 EST 2007
This is maybe not so efficient :) but it implements integer division
by 7 for positive integers without - and /.
def div2(num):
return num >> 1
def div4(num):
return num >> 2
def div8(num):
return num >> 3
def mul2(num):
return num << 1
def mul4(num):
return num << 2
def mul7(num):
return mul4(num) + mul2(num) + num
def div7_help(num, lo, hi):
avg = div2(lo + hi)
if avg == lo or avg == hi:
if mul7(hi) == num:
return hi
return lo
avg7 = mul7(avg)
if avg7 > num:
return div7_help(num, lo, avg)
elif avg7 < num:
return div7_help(num, avg, hi)
return avg
def div7(num):
lo = div8(num)
hi = div4(num)
return div7_help(num, lo, hi)
for nr in range(0, 20000):
#print "%d // 7 = %d" % (nr, nr // 7)
#print "div7(%d) = %d" % (nr, div7(nr))
assert nr // 7 == div7(nr)
A somewhat better approach is to convert the recursion to an
interative method. But that is.. um.. left as an exercise.
--
mvh Björn
More information about the Python-list
mailing list