QC is a minimalistic C library for simulating quantum circuits and algorithms
defining a zero qubit:
Q q = zero_qubit();
defining a one qubit:
Q q = one_qubit();
defining a qubit with different probabilities
Q q = new_qubit(1,1);
the first parameter of new_qubit function is probability of qubit being zero and the second is the probability of it being one
note: new_qubit function normalizes the values so in this example both probabilities will be 1/sqrt(2) or 0.7071
defining a group of two qubits
Q q0, q1;
Q2 q_group = {q0, q1};
defining group of three qubits
Q q0,q1,q2;
Q3 q_group = {q0, q1, q2};
Pauli-X gate:
pauli_x()
or X()
Pauli-Y gate:
pauli_y()
or Y()
Pauli-Z gate:
pauli_z()
or Z()
Hadamard gate:
hadamard()
or H()
Phase gate:
phase()
or P()
T gate:
t_gate()
or T()
Controlled NOT Gate:
cnot()
Controlled Z Gate:
cz()
Controlled S Gate:
cs()
Toffoli (CCNOT) Gate:
ccnot()
getting probability of qubit being zero:
float zero_prob = zero_chance(q);
getting probability of qubit being one:
float one_prob = one_chance(q);
measuring the value based on probabilities
int result = measure(q); // always 1 or 0
Bell state:
#include<stdio.h>
#include "qc.h"
int main() {
Q q0 = one_qubit();
Q q1 = zero_qubit();
q0 = H(q0);
Q2 q_group = cnot(q0, q1);
q0 = q_group.first;
q1 = q_group.second;
printf("Q0:\n");
printf("Zero Probability: %lf \n", zero_chance(q0)); // 0.5
printf("One Probability: %lf \n", one_chance(q0)); // 0.5
printf("Measured: %d\n", measure(q0));
printf("Q1:\n");
printf("Zero Probability: %lf \n", zero_chance(q1)); // 0.5
printf("One Probability: %lf \n", one_chance(q1)); // 0.5
printf("Measured: %d\n", measure(q1));
}
If you found this useful and would like to support, you can send donations to this XMR address: 43EfpCz23b5WPgzaw6UVnF9KsbvueFUumTuk3yMJ8acQbPPFoxgHfq6LE2qD8gNfR3j6Fzc4oGvXRCHvvfmdsYEvPtUXK2v