func main() {
	qreg := quantum.NewQReg(3, 1)
	quantum.HadamardReg(qreg)
	quantum.NewRealArrayGate([]float64{
		0, 1, 0, 0, 0, 0, 0, 0,
		1, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 1, 0, 0, 0, 0,
		0, 0, 1, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 1, 0, 0, 0,
		0, 0, 0, 0, 0, 1, 0, 0,
		0, 0, 0, 0, 0, 0, 1, 0,
		0, 0, 0, 0, 0, 0, 0, 1,
	}).ApplyReg(qreg)
	quantum.HadamardRange(qreg, 1, 3)
	if qreg.Measure()>>1 == 0 {
		fmt.Println("constant")
	} else {
		fmt.Println("balanced")
	}
	os.Exit(0)
}
Beispiel #2
0
func main() {
	n := 3
	qreg := quantum.NewQReg(n+1, 0)
	quantum.HadamardRange(qreg, 1, n+1)
	h := quantum.NewHadamardGate(1)
	u_f := quantum.NewClassicalGate(func(x int) int {
		if x>>1 == 5 {
			return x ^ 1
		}
		return x
	},
		n+1)
	states := 1 << uint(n)
	d := quantum.NewDiffusionGate(n)
	iterations := int((math.Pi * math.Sqrt(float64(states))) / 4.0)
	for i := 0; i < iterations; i++ {
		qreg.BSet(0, 1)
		h.ApplyRange(qreg, 0)
		u_f.ApplyReg(qreg)
		d.ApplyRange(qreg, 1)
	}
	fmt.Printf("Found %d\n", qreg.Measure()>>1)
	os.Exit(0)
}