defU_a(a, N, power): if a == 1or gcd(a, N) != 1: raise ValueError("gcd(a, N) is not 1") U = QuantumCircuit(QUBIT) for _iteration inrange(power): if a in [2, 13]: U.swap(2, 3) U.swap(1, 2) U.swap(0, 1) if a in [7, 8]: U.swap(0, 1) U.swap(1, 2) U.swap(2, 3) if a in [4, 11]: U.swap(1, 3) U.swap(0, 2) if a in [7, 11, 13]: for q inrange(4): U.x(q) U = U.to_gate() U.name = f"{a}^{power} mod N" c_U = U.control() return c_U
import numpy as np from qiskit import QuantumCircuit, transpile import qiskit_aer as Aer from math import gcd from fractions import Fraction
QUBIT = 4 N_COUNT = 8
defU_a(a, N, power): if a == 1or gcd(a, N) != 1: raise ValueError("gcd(a, N) is not 1") U = QuantumCircuit(QUBIT) for _iteration inrange(power): if a in [2, 13]: U.swap(2, 3) U.swap(1, 2) U.swap(0, 1) if a in [7, 8]: U.swap(0, 1) U.swap(1, 2) U.swap(2, 3) if a in [4, 11]: U.swap(1, 3) U.swap(0, 2) if a in [7, 11, 13]: for q inrange(4): U.x(q) U = U.to_gate() U.name = f"{a}^{power} mod N"
c_U = U.control() return c_U
defQFT(n): qc = QuantumCircuit(n) for qubit inrange(n // 2): qc.swap(qubit, n - qubit - 1) for j inrange(n): for m inrange(j): qc.cp(-np.pi / float(2 ** (j - m)), m, j) qc.h(j) qc.name = "QFT†" return qc
import numpy as np import time from qiskit import QuantumCircuit, transpile from qiskit_ibm_runtime import QiskitRuntimeService import qiskit_aer as Aer from math import gcd from fractions import Fraction
defQFT(n): qc = QuantumCircuit(n) for qubit inrange(n // 2): qc.swap(qubit, n - qubit - 1) for j inrange(n): for m inrange(j): qc.cp(-np.pi / float(2 ** (j - m)), m, j) qc.h(j) qc.name = "QFT†" return qc
defU_a(a, N, power): if a == 1or gcd(a, N) != 1: raise ValueError("gcd(a, N) is not 1") U = QuantumCircuit(QUBIT) for _iteration inrange(power): if a in [2, 13]: U.swap(2, 3) U.swap(1, 2) U.swap(0, 1) if a in [7, 8]: U.swap(0, 1) U.swap(1, 2) U.swap(2, 3) if a in [4, 11]: U.swap(1, 3) U.swap(0, 2) if a in [7, 11, 13]: for q inrange(4): U.x(q) U = U.to_gate() U.name = f"{a}^{power} mod N" c_U = U.control() return c_U