Book contents
- Frontmatter
- Contents
- Preface
- Preliminaries
- 1 Basic properties of the integers
- 2 Congruences
- 3 Computing with large integers
- 4 Euclid's algorithm
- 5 The distribution of primes
- 6 Abelian groups
- 7 Rings
- 8 Finite and discrete probability distributions
- 9 Probabilistic algorithms
- 10 Probabilistic primality testing
- 11 Finding generators and discrete logarithms in ℤ*p
- 12 Quadratic reciprocity and computing modular square roots
- 13 Modules and vector spaces
- 14 Matrices
- 15 Subexponential-time discrete logarithms and factoring
- 16 More rings
- 17 Polynomial arithmetic and applications
- 18 Linearly generated sequences and applications
- 19 Finite fields
- 20 Algorithms for finite fields
- 21 Deterministic primality testing
- Appendix: Some useful facts
- Bibliography
- Index of notation
- Index
3 - Computing with large integers
Published online by Cambridge University Press: 05 February 2015
- Frontmatter
- Contents
- Preface
- Preliminaries
- 1 Basic properties of the integers
- 2 Congruences
- 3 Computing with large integers
- 4 Euclid's algorithm
- 5 The distribution of primes
- 6 Abelian groups
- 7 Rings
- 8 Finite and discrete probability distributions
- 9 Probabilistic algorithms
- 10 Probabilistic primality testing
- 11 Finding generators and discrete logarithms in ℤ*p
- 12 Quadratic reciprocity and computing modular square roots
- 13 Modules and vector spaces
- 14 Matrices
- 15 Subexponential-time discrete logarithms and factoring
- 16 More rings
- 17 Polynomial arithmetic and applications
- 18 Linearly generated sequences and applications
- 19 Finite fields
- 20 Algorithms for finite fields
- 21 Deterministic primality testing
- Appendix: Some useful facts
- Bibliography
- Index of notation
- Index
Summary
In this chapter, we review standard asymptotic notation, introduce the formal computational model that we shall use throughout the rest of the text, and discuss basic algorithms for computing with large integers.
Asymptotic notation
We review some standard notation for relating the rate of growth of functions. This notation will be useful in discussing the running times of algorithms, and in a number of other contexts as well.
Let f and g be real-valued functions. We shall assume that each is defined on the set of non-negative integers, or, alternatively, that each is defined on the set of non-negative reals. Actually, as we are only concerned about the behavior of f(x) and g(x) as x → ∞, we only require that f(x) and g(x) are defined for all sufficiently large x (the phrase “for all sufficiently large x” means “for some x0 and all x ≥ x0”). We further assume that g is eventually positive, meaning that g(x) > 0 for all sufficiently large x. Then
f = O(g) means that |f(x)| ≤ cg(x) for some positive constant c and all sufficiently large x (read, “f is big-O of g”),
f = Ω(g) means that f(x) ≥ cg(x) for some positive constant c and all sufficiently large x (read, “f is big-Omega of g”),
f = Θ(g) means that cg(x) ≤ f(x) ≤ dg(x) for some positive constants c and d and all sufficiently large x (read, “f is big-Theta of g”),
[…]
- Type
- Chapter
- Information
- Publisher: Cambridge University PressPrint publication year: 2008