This is already part 9 of the series (time flies!). So far we have covered a wide array of topic around the nature of quantum computational units called qubits, superposition, entanglement, single-qubit gates, multi-qubit gates and some interesting concepts from the area of quantum information theory. In this post we will shift our attention to another interesting field in the quantum landscape – quantum cryptography. More specifically, we will explore a reference protocol for quantum key distribution, called BB884, discuss why it’s secure even when using a public channel to exchange qubits and realize a simple demonstrative implementation using Q#.

## Introduction to quantum computing with Q# – Part 8, Superdense coding

Last time, we discussed the quantum teleportation protocol, which relies on the phenomenon of quantum entanglement to move an arbitrary quantum state from one qubit to another, even if they are spatially separated. Today, we shall continue exploring the scenarios enabled by entanglement, by looking at the concept called “superdense coding”. It allows sending two classical bits of information by physically moving only a single qubit around, and is sometimes referred to as a conceptual inverse of teleportation.

## Introduction to quantum computing with Q# – Part 7, Quantum state teleportation

In the previous part of the series we discussed how quantum theory prohibits copying of an arbitrary quantum state. In computing terms, this means that regardless of the richness of features provided by high-level quantum-specific languages such as Q#, we cannot implement a classical functionality of copy-and-paste on a quantum computer.

It turns out, however, that we can achieve a cut-and-paste type of effect, through a remarkable process of quantum teleportation.

## Introduction to quantum computing with Q# – Part 6, No-cloning theorem

In the last part of this series we looked at the phenomenon of entanglement – one of the core concepts of quantum theory, which has been fundamentally important in the development of quantum information theory. We grappled with its deeply mysterious behavior and tried to understand and project its consequences onto the Q# code.

In today’s part 6, we shall ask ourselves a seemingly innocent question – how to you clone a quantum state, or in other words, how do you copy a qubit?

## Introduction to quantum computing with Q# – Part 5, Entanglement

In the last post in this series we dove deep into the mathematics and usage examples of multi-qubit gates, with special attention paid to one of the most critical gates in quantum computing, the CNOT gate.

In today’s post we are going to explore the wonders of entanglement – a core concept of quantum mechanics and a critical idea for quantum computing, where it is obtained via the application of the CNOT gate.

## Introduction to quantum computing with Q# – Part 4, multi-qubit gates

In the previous post of this series, we discussed single qubit gates. In this next instalment, we are going to explore gates that act on multiple qubits at once, thus completing the exploration of quantum circuit building. We are also going to slowly, but diligently uncover the underlying theoretical scheme towards one of the most bizarre concepts in quantum mechanics – entanglement, which is something that will be dedicating the next part to.

## Introduction to quantum computing with Q# – Part 3, Single qubit gates

We left off in the last post after having discussed the Hadamard gate – our first quantum gate – and how it can be used to crate a uniform superposiiton for a single qubit. We are going to continue today by exploring other single qubit gates, discussing the underlying mathematics and, of course, testing it all out with some Q# code.

## Introduction to quantum computing with Q# – Part 2, Superposition

In the previous post in this series we mentioned the concept of superposition briefly. Let's use this second part to dive deeper into the mathematics of it, meet the cat of Schrödinger and try to find some simple quantum computing use cases for it.

## Introduction to quantum computing with Q# – Part 1, The background and the qubit

Quantum mechanics is one of the fundamental theories of physics, and has been tremendously successful at describing the behavior of subatomic particles. However, its counter-intuitive probabilistic nature, bizarre rules and confusing epistemology have troubled some of the greatest physicists of the 20th century, even prompting Albert Einstein to remark “Old Man (often translated as 'God') doesn't play dice”.

Today, we are at the dawn of the quantum computing age, a multidisciplinary field that sits at the intersection of quantum physics, computer science, mathematics and chemistry and may revolutionize the world of computing and software engineering.

In this post I am starting a new series that will, through the lens of a .NET developer, introduce the basics of quantum computing – using examples in Q#.