File ShorFastSimulator.hpp

class ShorFastSimulator : public Simulator

Public Functions

inline ShorFastSimulator(const std::uint32_t compositeNumber, const std::uint32_t coprimeA_, const bool verbose_ = false)
inline ShorFastSimulator(const std::uint32_t compositeNumber, const std::uint32_t coprimeA_, const std::uint64_t seed_, const bool verbose_ = false)
virtual std::map<std::string, std::size_t> simulate(std::size_t shots) override

Run the simulation in the (derived) class.

Parameters:

shots – number of shots to take from the final quantum state

Returns:

a map from the strings representing basis states to the number of times they have been measured

inline virtual std::string getName() const override
inline virtual std::size_t getNumberOfQubits() const override
inline virtual std::size_t getNumberOfOps() const override
inline std::pair<std::uint32_t, std::uint32_t> getFactors()
inline virtual std::map<std::string, std::string> additionalStatistics() override

Private Functions

void uAEmulate2(std::uint64_t a)
void uAEmulate2Rec(dd::vEdge e)
std::pair<std::uint32_t, std::uint32_t> postProcessing(const std::string &sample) const
void applyGate(dd::GateMatrix matrix, dd::Qubit target)
dd::mEdge addConst(std::uint64_t a)
dd::mEdge addConstMod(std::uint64_t a)
dd::mEdge limitTo(std::uint64_t a)

Private Members

std::vector<std::map<dd::vNode*, dd::vCachedEdge>> nodesOnLevel
std::uint32_t compositeN

composite number to be factored

std::uint32_t coprimeA

coprime number to compositeN. Setting this to zero will randomly generate a suitable number

std::size_t requiredBits
std::size_t nQubits
std::string simResult = "did not start"
std::pair<std::uint32_t, std::uint32_t> simFactors = {0, 0}
std::size_t numberOfOperations = {}
bool verbose
std::map<dd::vNode*, dd::vEdge> dagEdges

Private Static Functions

static inline std::uint64_t modpow(std::uint64_t base, std::uint64_t exp, std::uint64_t modulus)
static inline std::uint64_t gcd(std::uint64_t a, std::uint64_t b)
static inline double cosine(double fac, double div)
static inline double sine(double fac, double div)