You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.1 KiB
44 lines
1.1 KiB
#pragma once
|
|
|
|
#include <assert.h>
|
|
#include <stdlib.h>
|
|
#include <iostream>
|
|
#include <vector>
|
|
#include <complex>
|
|
|
|
using namespace std;
|
|
|
|
using QuantumGate = vector<vector<complex<double>>>;
|
|
|
|
class QReg
|
|
{
|
|
public:
|
|
QReg(size_t numberOfQubits, int init_bit)
|
|
{
|
|
numberOfQubits = numberOfQubits;
|
|
qubits = (int *)calloc(sizeof(int), numberOfQubits);
|
|
numberOfAmplitudes = (1 << numberOfQubits);
|
|
|
|
QuantumGate matrix_(numberOfAmplitudes, vector<complex<double>>(1));
|
|
amplitude_matrix = matrix_;
|
|
|
|
amplitude_matrix[init_bit][0] = 1;
|
|
}
|
|
|
|
void applyGateToSystem(QuantumGate gate);
|
|
QuantumGate dot_product_amplitudes(QuantumGate gate);
|
|
void printAmplitudes();
|
|
static QuantumGate tensor(QuantumGate A, QuantumGate B);
|
|
const static QuantumGate HAD_GATE;
|
|
const static QuantumGate ID_GATE;
|
|
const static QuantumGate CNOT_GATE;
|
|
static void printGate(QuantumGate gate);
|
|
|
|
static QuantumGate getGateByString(const char* gate);
|
|
|
|
private:
|
|
int numberOfQubits;
|
|
int numberOfAmplitudes;
|
|
int *qubits;
|
|
vector<vector<complex<double>>> amplitude_matrix;
|
|
};
|
|
|