While the mathematical basis of quantum computing, the programming model, and most quantum algorithms have been published decades ago (starting in the 1990s), they have been of interest only to a small dedicated community. Time has come to make quantum algorithms and their implementations accessible to a broader audience aiming to explain the principles of quantum programming, which are quite different from those of classical programming.

Lecture 1: From classical computers to quantum computers
- Classical computers in the circuit representation: Bits, gates, universality, computational complexity
- Motivations to build a quantum computer: Quantum parallelism and quantum speedup
- Introduction of quantum computing in the quantum circuit model
- Universal set of quantum gates – connection to entanglement
- The measurement   

Lecture 2: Quantum Algorithms  
- Warm-up: Deutsch's problem  
- Data search: Grover’s algorithm
- Factorization: Shor’s algorithm   

Lecture 3: Quantum Error correction
- The role of decoherence in a quantum circuit
- Introduction to repetition codes
- Stabilizer formalism.
- Quantum threshold theorem and fault-tolerant quantum computing. The example of surface codes   

Lecture 4: Quantum optimization I: Quantum annealing
- Warm-up: Quantum adiabatic theorem
- Quantum annealing
- Fundamental limitations of quantum annealing  

Lecture 5: Quantum optimization II: hybrid classical quantum Quantum annealing
- Quantum approximation optimization algorithm (QAOA)
- Analog/Digital quantum Simulation.
- Solving quantum chemistry problems
– variational quantum eigensolver (VQE)   

Useful references:  J. Preskill’s notes on quantum information: http://theory.caltech.edu/~preskill/ph229/ Quantum computation and quantum information, M. Nielsen, I. Chuang, Cambrige Press  

Prerequisite: Quantum mechanics M1