Understanding Quantum Computing: Quantum Computation and Quantum Information