public static void AddModuloQFT(this QuantumComputer comp, ulong a, ulong N, RegisterRef ctrl, Register b, params RegisterRef[] controls) { Validate(a, b, N); comp.QFT(b); comp.AddModuloQFTPhi(a, N, ctrl, b, controls); comp.InverseQFT(b); }
public static void MultModuloQFT(this QuantumComputer comp, ulong a, ulong N, RegisterRef ctrl, Register x, Register b, RegisterRef control) { Validate(a, b, N); comp.QFT(b); for (int i = 0; i < x.Width; i++) { //Console.WriteLine("MultModulo i = {2}, a = {0}, N = {1}", a, N, i); comp.AddModuloQFTPhi(((((ulong)1 << i) * a) % N), N, ctrl, b, x[i], control); } comp.InverseQFT(b); }
public static void AddModuloQFT(this QuantumComputer comp, ulong a, ulong N, RegisterRef ctrl, Register b, params RegisterRef[] controls) { if (comp.Group) { object[] parameters = new object[] { comp, a, N, ctrl, b, controls }; comp.AddParametricGate("AddModuloQFT", parameters); return; } else { comp.Group = true; } Validate(a, b, N); comp.QFT(b); comp.AddModuloQFTPhi(a, N, ctrl, b, controls); comp.InverseQFT(b); }
public static void MultModuloQFT(this QuantumComputer comp, ulong a, ulong N, RegisterRef ctrl, Register x, Register b, RegisterRef control) { if (comp.Group) { object[] parameters = new object[] { comp, a, N, ctrl, x, b, control }; comp.AddParametricGate("MultModuloQFT", parameters); return; } else { comp.Group = true; } Validate(a, b, N); comp.QFT(b); for (int i = 0; i < x.Width; i++) { comp.AddModuloQFTPhi(((((ulong)1 << i) * a) % N), N, ctrl, b, x[i], control); } comp.InverseQFT(b); }