← 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 lcm(a, b int64) int64 {
	return a / gcd(a, b) * b
}

func getDivisors(x int64) []int64 {
	var res []int64
	for i := int64(1); i*i <= x; i++ {
		if x%i == 0 {
			res = append(res, i)
			if i != x/i {
				res = append(res, x/i)
			}
		}
	}
	sort.Slice(res, func(i, j int) bool { return res[i] < res[j] })
	return res
}

func main() {
	in := bufio.NewReader(os.Stdin)
	var t int
	fmt.Fscan(in, &t)
	for tt := 0; tt < t; tt++ {
		var n int
		fmt.Fscan(in, &n)
		a := make([]int64, n)
		for i := 0; i < n; i++ {
			fmt.Fscan(in, &a[i])
		}
		hasDominating := false
		var m int64
		for k := 0; k < n; k++ {
			cand := a[k]
			ok := true
			for i := 0; i < n; i++ {
				if cand%a[i] != 0 {
					ok = false
					break
				}
			}
			if ok {
				hasDominating = true
				m = cand
				break
			}
		}
		if !hasDominating {
			fmt.Println(n)
			continue
		}
		v := make(map[int64]bool)
		for _, x := range a {
			v[x] = true
		}
		divs := getDivisors(m)
		maxLen := 0
		for _, d := range divs {
			if v[d] {
				continue
			}
			var l int64
			cnt := 0
			for _, x := range a {
				if d%x == 0 {
					cnt++
					if cnt == 1 {
						l = x
					} else {
						l = lcm(l, x)
					}
				}
			}
			if cnt > 0 && l == d {
				if cnt > maxLen {
					maxLen = cnt
				}
			}
		}
		fmt.Println(maxLen)
	}
}
```