Skip to content

31.9 Integer factorization

31.9-1

Referring to the execution history shown in Figure 31.7(a), when does \text{POLLARDRHO} print the factor 7373 of 13871387?

x=84x = 84, y=814y = 814.

31.9-2

Suppose that we are given a function f:ZnZnf : \mathbb Z_n \rightarrow \mathbb Z_n and an initial value x0Znx_0 \in \mathbb Z_n. Define xi=f(xi1)x_i = f(x_{i - 1}) for i=1,2,i = 1, 2, \ldots. Let tt and u>0u > 0 be the smallest values such that xt+i=xt+u+ix_{t + i} = x_{t + u + i} for i=0,1,i = 0, 1, \ldots. In the terminology of Pollard's rho algorithm, tt is the length of the tail and uu is the length of the cycle of the rho. Give an efficient algorithm to determine tt and uu exactly, and analyze its running time.

(Omit!)

31.9-3

How many steps would you expect POLLARD-RHO\text{POLLARD-RHO} to require to discover a factor of the form pep^e, where pp is prime and e>1e > 1?

Θ(p)\Theta(\sqrt p).

31.9-4 \star

One disadvantage of POLLARD-RHO\text{POLLARD-RHO} as written is that it requires one gcd computation for each step of the recurrence. Instead, we could batch the gcd computations by accumulating the product of several xix_i values in a row and then using this product instead of xix_i in the gcd computation. Describe carefully how you would implement this idea, why it works, and what batch size you would pick as the most effective when working on a β\beta-bit number nn.

(Omit!)