// q1 q0 // a0 0 0 // a1 0 1 // a2 1 0 // a3 1 1 // void h( Complex a[], int i, int j) // half Hadamard { Complex t0 = a[i], t1 = a[j]; a[i] = s2*(t0+t1); a[j] = s2*(t0-t1); } void H( Complex a[], int k) // Hadamard on qubit k { if( k == 0) { h( a, 0, 1); h( a, 2, 3); } else { h( a, 0, 2); h( a, 1, 3); } }