Quantum Algorithmic Techniques for Fault-tolerant Quantum Computers