Solutions manual for NTB - 3.3. Basic integer arithmetic
Let's review some notations and facts. For an integer
, we define its bit length, or simply, its length, which we denote by
, to be the number of bits in the binary representation of
; more precisely,

If
, we say that
is an
-bit integer. Notice that if
is a positive,
-bit integer, then
, or equivalently,
.
Let a and b be arbitrary integers. Then we have:
(i) We can compute
in time
.
(ii) We can compute
in time
.
Let a and b be arbitrary integers. Then we have:
(i) We can compute
in time
.
(ii) We can compute
in time
.
(iii) If
, we can compute the quotient
and the remainder
in time
.
Exercise 3.24. Let
with
, and let
. Show that:
Proof
If you look at the list of errata, you'll see that I found a stronger version of this exercise. My proof is as following.
We see that
. Hence what we need to prove is:

which is the same as proving:
for some 
which in turn can be proved by using this fact:
for all
.
(q.e.d.)
Exercise 3.25. Let
be postivie integers. Show that:

Proof
As in Exercise 3.24, I think I found a slightly better version of this exercise as follows:

We can prove it using the same technique as the proof of Exercise 3.24. We see that:
,
,

Since we have
for all
, we see that:

and,
.
(q.e.d.)
Exercise 3.26. Show that given integers
, with each
, we can compute the product
in time
.
Proof
(q.e.d.)
Exercise 3.27. Show that given integers
, with each
, where
, we can compute
in time
.
Proof
(q.e.d.)
Exercise 3.28. Show that given integers
, with each
, we can compute
, where
, in time
.
Proof
(q.e.d.)
Exercise 3.29. This exercise develops an algorithm to compute
for a given positive integer
. Consider the following algorithm:



(a) Show that this algorithm correctly computes
.
(b) In a straightforward implementation of this algorithm, each loop iteration takes time
, yielding a total running time of
. Give a more careful implementation, so that each loop iteration takes time
, yielding a total running time is
.
Proof
(q.e.d.)
Exercise 3.30. Modify the algorithm in the previous exercise so that given positive integers
and
, with
, it computes
in time
.
Proof
(q.e.d.)
Exercise 3.31. An integer
is called a perfect power if
for some integers
and
. Using the algorithm from the previous exercis, design an efficient algorithm that determines if a given
is perfect power, and if it is, also computes
and
such that
, where
,
, and
is as small as possible. Your algorithm should run in time
where
.
Proof
(q.e.d.)
Exercise 3.32. Show how to convert (in both directions) in time
between the base-10 representation and our implementation's internal representation of an integer
.
Proof
(q.e.d.)
Let a and b be arbitrary integers. Then we have:
(i) We can compute
(ii) We can compute
Let a and b be arbitrary integers. Then we have:
(i) We can compute
(ii) We can compute
(iii) If
Exercise 3.24. Let
Proof
If you look at the list of errata, you'll see that I found a stronger version of this exercise. My proof is as following.
We see that
which is the same as proving:
which in turn can be proved by using this fact:
(q.e.d.)
Exercise 3.25. Let
Proof
As in Exercise 3.24, I think I found a slightly better version of this exercise as follows:
We can prove it using the same technique as the proof of Exercise 3.24. We see that:
Since we have
and,
(q.e.d.)
Exercise 3.26. Show that given integers
Proof
(q.e.d.)
Exercise 3.27. Show that given integers
Proof
(q.e.d.)
Exercise 3.28. Show that given integers
Proof
(q.e.d.)
Exercise 3.29. This exercise develops an algorithm to compute
(a) Show that this algorithm correctly computes
(b) In a straightforward implementation of this algorithm, each loop iteration takes time
Proof
(q.e.d.)
Exercise 3.30. Modify the algorithm in the previous exercise so that given positive integers
Proof
(q.e.d.)
Exercise 3.31. An integer
Proof
(q.e.d.)
Exercise 3.32. Show how to convert (in both directions) in time
Proof
(q.e.d.)