2

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.

FDGod
  • 2,901
  • 2
  • 6
  • 31

0 Answers0