QFTDivider
QuICT.algorithm.arithmetic.divider.qft_divider.CCRk ¶
Bases: CompositeGate
Build two control qubit \(R_k\) gate according to the paper.
References
[1]: "Integer Numeric Multiplication Using Quantum Fourier Transform" by Joseph L Pachuau, Arnab Roy and Anish Kumar Saha https://doi.org/10.1007/s40509-021-00262-w.
Parameters:
-
k(int) –The value of 'k' in \(R_k\).
-
name(str, default:None) –The name of this gate.
Source code in QuICT/algorithm/arithmetic/divider/qft_divider.py
QuICT.algorithm.arithmetic.divider.qft_divider.SUBModule ¶
Bases: CompositeGate
Implement a subtractor which is part of the following dividers.
This module in total requires 2n qubits.
$$
\vert{\Phi (a)}\rangle_n \vert{b}\rangle_n
\to
\vert{\Phi (a-b)}\rangle_n \vert{b}\rangle_n
$$
References
[1]: "Quantum Division Circuit Based on Restoring Division Algorithm" by Alireza Khosropour, Hossein Aghababa and Behjat Forouzandeh https://ieeexplore.ieee.org/document/5945378.
Parameters:
-
qreg_size(int) –The register size for the operand which is same as the register size for the dividend in the following divider.
-
name(str, default:None) –The name of this module.
Raises:
-
GateParametersAssignedError–If
qreg_sizeis smaller than 2.
Source code in QuICT/algorithm/arithmetic/divider/qft_divider.py
QuICT.algorithm.arithmetic.divider.qft_divider.CtrlAddSubModule ¶
Bases: CompositeGate
Implement a control adder-subtractor module which is part of the following dividers.
This module in total requires 2n + 1 qubits.
$$
\vert{\text{ctrl}}\rangle \vert{\Phi (a)}\rangle_n \vert{b}\rangle_n
\to
\vert{\text{ctrl}}\rangle \vert{\Phi (a+(-1)^\text{ctrl}\times b)}\rangle_n \vert{b}\rangle_n
$$
Parameters:
-
qreg_size(int) –The register size for two operands which is same as the register size for the dividend in the following dividers.
-
name(str, default:None) –The name of this module.
Raises:
-
GateParametersAssignedError–If
qreg_sizeis smaller than 2.
Source code in QuICT/algorithm/arithmetic/divider/qft_divider.py
QuICT.algorithm.arithmetic.divider.qft_divider.CtrlADDModule ¶
Bases: CompositeGate
Implement a control adder which is part of the following dividers.
This module in total requires 2n + 1 qubits.
$$
\vert{\text{ctrl}}\rangle \vert{\Phi (a)}\rangle_n \vert{b}\rangle_n
\to
\vert{\text{ctrl}}\rangle \vert{\Phi (a+\text{ctrl}\times b)}\rangle_n \vert{b}\rangle_n
$$
References
[1]: "Quantum Division Circuit Based on Restoring Division Algorithm" by Alireza Khosropour, Hossein Aghababa and Behjat Forouzandeh https://ieeexplore.ieee.org/document/5945378.
Parameters:
-
qreg_size(int) –The register size for the operand which is same as the register size for the dividend in the following dividers.
-
name(str, default:None) –The name of this module.
-
Raises–GateParametersAssignedError: If
qreg_sizeis smaller than 2.
Source code in QuICT/algorithm/arithmetic/divider/qft_divider.py
QuICT.algorithm.arithmetic.divider.qft_divider.QFTDivider ¶
Bases: CompositeGate
Implement a quantum divider using non-restoring algorithm based on QFT
that in total require 3n - 1 qubits.
$$
\vert{0}\rangle_{n-1} \vert{b}\rangle_n \vert{a}\rangle_n
\to
\vert{b//a}\rangle_n \vert{b%a}\rangle_{n-1} \vert{a}\rangle_n
$$
Note:
The divisor's highest bit must be zero.
If divisor is set to zero, the result of running this divider is:
$$
\vert{0}\rangle_{n-1} \vert{b}\rangle_n \vert{0}\rangle_n
\to
\vert{2^n-1}\rangle_n \vert{b_{n-2}...b_0}\rangle_{n-1} \vert{0}\rangle_n
$$
References
[1]: "Quantum Circuit Designs of Integer Division Optimizing T-count and T-depth" by Himanshu Thapliyal, Edgard Muñoz-Coreas, T.S.S.Varun and Travis S.Humble https://ieeexplore.ieee.org/document/8691552.
[2]: "Integer Numeric Multiplication Using Quantum Fourier Transform" by Joseph L Pachuau, Arnab Roy and Anish Kumar Saha https://doi.org/10.1007/s40509-021-00262-w.
[3]: "Quantum Division Circuit Based on Restoring Division Algorithm" by Alireza Khosropour, Hossein Aghababa and Behjat Forouzandeh https://ieeexplore.ieee.org/document/5945378.
Parameters:
-
qreg_size(int) –The register size for the dividend and divisor.
-
name(str, default:None) –The name of the divider.
Raises:
-
GateParametersAssignedError–If
qreg_sizeis smaller than 3.