Quantum Algorithmic Techniques for Fault-Tolerant Quantum Computers