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.
When I try to repeat this with $N=35$ and, let's say, $a=8$, I get the following values.
The problem I'm having is I don't know how to loop through those numbers with just $SWAP$ and $X$ gates.