Qiskit / app.py
samyak152002's picture
Update app.py
39c2890
raw
history blame
No virus
2.76 kB
import streamlit as st
from qiskit import QuantumRegister, QuantumCircuit, ClassicalRegister
from qiskit import Aer, execute
from math import pi
def createInputState(qc, reg, n, pie):
qc.h(reg[n])
for i in range(0, n):
qc.cp(pie / float(2**(i + 1)), reg[n - (i + 1)], reg[n])
def evolveQFTState(qc, reg_a, reg_b, n, pie, factor):
l = len(reg_b)
for i in range(0, n + 1):
if (n - i) > l - 1:
pass
else:
qc.cp(factor*pie / float(2**(i)), reg_b[n - i], reg_a[n])
def inverseQFT(qc, reg, n, pie):
for i in range(0, n):
qc.cp(-1 * pie / float(2**(n - i)), reg[i], reg[n])
qc.h(reg[n])
def add(reg_a, reg_b, circ, factor):
pie = pi
n = len(reg_a) - 1
for i in range(0, n + 1):
createInputState(circ, reg_a, n - i, pie)
for i in range(0, n + 1):
evolveQFTState(circ, reg_a, reg_b, n - i, pie, factor)
for i in range(0, n + 1):
inverseQFT(circ, reg_a, i, pie)
def quantum_multiply(multiplicand_in, multiplier_in):
multiplicand = QuantumRegister(len(multiplicand_in))
multiplier = QuantumRegister(len(multiplier_in))
accumulator = QuantumRegister(len(multiplicand_in) + len(multiplier_in))
cl = ClassicalRegister(len(multiplicand_in) + len(multiplier_in))
d = QuantumRegister(1)
circ = QuantumCircuit(accumulator, multiplier, multiplicand, d, cl, name="qc")
circ.x(d)
for i in range(len(multiplicand_in)):
if multiplicand_in[i] == '1':
circ.x(multiplicand[len(multiplicand_in) - i - 1])
for i in range(len(multiplier_in)):
if multiplier_in[i] == '1':
circ.x(multiplier[len(multiplicand_in) - i - 1])
multiplier_str = '1'
while int(multiplier_str) != 0:
add(accumulator, multiplicand, circ, 1)
add(multiplier, d, circ, -1)
for i in range(len(multiplier)):
circ.measure(multiplier[i], cl[i])
result = execute(circ, backend=Aer.get_backend('qasm_simulator'), shots=2).result().get_counts(circ.name)
multiplier_str = list(result.keys())[0]
circ.measure(accumulator, cl)
result = execute(circ, backend=Aer.get_backend('qasm_simulator'), shots=2).result().get_counts(circ.name)
return result
def main():
st.title("Quantum Multiplication App Using Fourier Transform")
st.write("Enter two binary numbers to perform quantum multiplication.")
multiplicand_in = st.text_input("Enter the multiplicand (binary):")
multiplier_in = st.text_input("Enter the multiplier (binary):")
if st.button("Multiply"):
result = quantum_multiply(multiplicand_in, multiplier_in)
st.write("Result of Quantum Multiplication:", result)
if __name__ == "__main__":
main()