algorithms used in quantum computing