public static void AddQFTPhi(this QuantumComputer comp, Register a, Register b, params RegisterRef[] controls) { Validate(a, b); for (int j = b.Width - 1; j >= 0; j--) { for (int i = j; i >= 0; i--) { List<RegisterRef> list = controls.ToList<RegisterRef>(); list.Add(a[i]); RegisterRef[] controls2 = list.ToArray(); comp.CPhaseShift(Math.Abs(j - i), b[j], controls2); } } }
public static void AddQFTPhi(this QuantumComputer comp, Register a, Register b, params RegisterRef[] controls) { if (comp.Group) { object[] parameters = new object[] { comp, a, b, controls }; comp.AddParametricGate("AddQFTPhi", parameters); return; } else { comp.Group = true; } Validate(a, b); for (int j = b.Width - 1; j >= 0; j--) { for (int i = j; i >= 0; i--) { List<RegisterRef> list = controls.ToList<RegisterRef>(); list.Add(a[i]); RegisterRef[] controls2 = list.ToArray(); comp.CPhaseShift(Math.Abs(j-i), b[j], controls2); } } }
public static void AddQFTPhi(this QuantumComputer comp, ulong a, Register b, params RegisterRef[] controls) { if (comp.Group) { object[] parameters = new object[] { comp, a, b, controls }; comp.AddParametricGate("AddQFTPhi", parameters); return; } else { comp.Group = true; } bool[] aBin = Quantum.Utils.getBinaryRepresentation(a, b.Width); for (int j = b.Width - 1; j >= 0; j--) { //comp.ClassicalCPhaseShift(b[j], aBin[j], b.Width - j, controls); for (int i = j; i >= 0; i--) { if (aBin[i]) { comp.CPhaseShift(Math.Abs(j - i), b[j], controls); } } } }