chapter 7, update
update
update
update, comments, explanatory questions; substitution simple ** by square_and_multiply() since ** gives wrong results at high intermediate results
FIXME: current square_and_multiply seems to have issues