Quantum Computing - Interview Questions
What about Integration with quantum and classical computation?
`Q#` is a standalone language offering a high level of abstraction. There is no notion of a quantum state or a circuit; instead, `Q#` implements programs in terms of statements and expressions, much like classical programming languages. Distinct quantum capabilities (such as support for functors and control-flow constructs) facilitate expressing, for example, phase estimation and quantum chemistry algorithms.

For example, the following `Q#` program constructs a Hamiltonian describing the Hydrogen molecule, and obtains estimates of its energy levels by simulating the quantum phase estimation algorithm.
``````namespace Microsoft.Quantum.Chemistry.Samples.Hydrogen {
open Microsoft.Quantum.Intrinsic;
open Microsoft.Quantum.Canon;
open Microsoft.Quantum.Chemistry.JordanWigner;
open Microsoft.Quantum.Simulation;
open Microsoft.Quantum.Characterization;
open Microsoft.Quantum.Convert;
open Microsoft.Quantum.Math;

operation GetEnergyByTrotterization (qSharpData : JordanWignerEncodingData, nBitsPrecision : Int, trotterStepSize : Double, trotterOrder : Int) : (Double, Double) {

// The data describing the Hamiltonian for all these steps is contained in
// `qSharpData`
let (nSpinOrbitals, fermionTermData, statePrepData, energyOffset) = qSharpData!;

// Using a Product formula, also known as `Trotterization` to
// simulate the Hamiltonian.
let (nQubits, (rescaleFactor, oracle)) = TrotterStepOracle(qSharpData, trotterStepSize, trotterOrder);

// The operation that creates the trial state is defined below.
// By default, greedy filling of spin-orbitals is used.
let statePrep = PrepareTrialState(statePrepData, _);

// Using the Robust Phase Estimation algorithm of Kimmel, Low and Yoder.
let phaseEstAlgorithm = RobustPhaseEstimation(nBitsPrecision, _, _);

// This runs the quantum algorithm and returns a phase estimate.
let estPhase = EstimateEnergy(nQubits, statePrep, oracle, phaseEstAlgorithm);

// Obtaining the energy estimate by rescaling the phase estimate with the trotterStepSize. We also add the constant energy offset
// to the estimated energy.
let estEnergy = estPhase * rescaleFactor + energyOffset;

// This returns both the estimated phase, and the estimated energy.
return (estPhase, estEnergy);
}
}``````
Advertisement