// q1 q0 // a0 0 0 // a1 0 1 // a2 1 0 // a3 1 1 // void X( Complex a[], int k) // NOT on qubit k { if( k == 0) { swap( a, 0, 1); swap( a, 2, 3); } else { swap( a, 0, 2); swap( a, 1, 3); } } void CX( Complex a[], int c, int k) // controlled-NOT on qubit k controlled by qubit c { if( c == 1) swap( a, 2, 3); else swap( a, 1, 3); } void Z( Complex a[], int k) // phase-flip qubit k { if( k == 0) { a[1] = -a[1]; a[3] = -a[3]; } else { a[2] = -a[2]; a[3] = -a[3]; } } ... int main( void) { Complex a[4] = { 1, 0, 0, 0 }; ...