2
$\begingroup$

I understand the following code on why the specific swaps take place, but when I try to replicate it with $N=35$, I get confused.

def c_amod15(a, x):
if a not in [2,4,7,8,11,13]:
    raise ValueError("'a' must be 2,7,8,11,13")
U = QuantumCircuit(4)    

for iteration in range(x):
    if a in [2,13]:
        U.swap(0,1)
        U.swap(1,2)
        U.swap(2,3)
    if a in [7,8]:
        U.swap(2,3)
        U.swap(1,2)
        U.swap(0,1)
    if a == 11:
        U.swap(1,3)
        U.swap(0,2)
    if a in [7,11,13]:
        for q in range(4):
            U.x(q)
            
U = U.to_gate()
U.name = "%i^%i mod 15" % (a, x)
c_U = U.control()

return c_U

for x in range(n):
    exponent = 2**x
    circuit.append(c_amod15(a, exponent), 
                 [x] + list(range(n, n+m)))

For example, if $a=8\,,$

  • 0001 (start)
  • (1st swap) 0010
  • (2nd) 0100
  • (3rd) 1000
  • 2nd iteration = 0100
  • 3rd iteration = 0010
  • 4th iteration = 0001

This loops back to 1 with a period of 4.

table of modular exponentiation

When I try to repeat this with $N=35$ and, let's say, $a=8$, I get the following values.

Modular exponentiation for N=35 a=8

1= 000001

8= 001000

29= 011101

22= 010110

The problem I'm having is I don't know how to loop through those numbers with just $SWAP$ and $X$ gates.

$\endgroup$

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.