← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

func gcd(a, b int64) int64 {
	for b != 0 {
		a, b = b, a%b
	}
	return a
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var t int
	fmt.Fscan(reader, &t)
	for ; t > 0; t-- {
		var n int
		var a, b int64
		fmt.Fscan(reader, &n, &a, &b)
		c := make([]int64, n)
		for i := 0; i < n; i++ {
			fmt.Fscan(reader, &c[i])
		}
		if n == 1 {
			fmt.Fprintln(writer, 0)
			continue
		}
		g := gcd(a, b)
		r := make([]int64, n)
		for i, v := range c {
			r[i] = v % g
		}
		sort.Slice(r, func(i, j int) bool { return r[i] < r[j] })
		d := make([]int64, 2*n)
		for i := 0; i < n; i++ {
			d[i] = r[i]
			d[i+n] = r[i] + g
		}
		ans := d[n-1] - d[0]
		for i := 1; i < n; i++ {
			val := d[i+n-1] - d[i]
			if val < ans {
				ans = val
			}
		}
		fmt.Fprintln(writer, ans)
	}
}
```