File ShorSimulator.hpp

class ShorSimulator : public Simulator

Public Functions

inline ShorSimulator(const std::size_t compositeNumber, const std::size_t coprimeNumber)
inline ShorSimulator(const std::size_t compositeNumber, const std::size_t coprimeNumber, const std::uint64_t seed_)
inline ShorSimulator(const std::size_t compositeNumber, const std::size_t coprimeNumber, const bool verbose_, const bool approximate_)
inline ShorSimulator(const std::size_t compositeNumber, const std::size_t coprimeNumber, const std::uint64_t seed_, const bool verbose_, const bool approximate_)
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 uAEmulate(std::uint64_t a, std::int32_t q)
dd::mEdge addConst(std::uint64_t a)
dd::mEdge addConstMod(std::uint64_t a)
dd::mEdge limitTo(std::uint64_t a)
std::pair<std::uint32_t, std::uint32_t> postProcessing(const std::string &sample) const

Private Members

std::vector<std::uint64_t> ts
std::size_t compositeN

composite number to be factored

std::size_t coprimeA

coprime number to coprimeN. 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::string polrResult = "did not start"
std::pair<std::uint32_t, std::uint32_t> polrFactors = {0, 0}
bool verbose
bool approximate
std::uint64_t approximationRuns = {0}
long double finalFidelity = {1.0L}
double stepFidelity = {0.9}
std::map<dd::vNode*, dd::mEdge> 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)