← Home
```go
package main

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

func main() {
	in := bufio.NewReader(os.Stdin)
	var t int
	fmt.Fscan(in, &t)
	for i := 0; i < t; i++ {
		var n int
		fmt.Fscan(in, &n)
		a := make([]int64, n)
		for i := 0; i < n; i++ {
			fmt.Fscan(in, &a[i])
		}
		freq := make(map[int64]int64)
		for _, x := range a {
			freq[x]++
		}
		var ans int64 = 0
		for _, f := range freq {
			ans += f * (f - 1) * (f - 2)
		}
		var vals []int64
		for v := range freq {
			vals = append(vals, v)
		}
		for _, B := range vals {
			divs := getDivisors(B)
			for _, d := range divs {
				b := B / d
				if b < 2 {
					continue
				}
				C := B * b
				if C > 1000000000000000000 || C > 1000000000 {
					continue
				}
				f, ok := freq[C]
				if ok {
					ans += freq[d] * freq[B] * f
				}
			}
		}
		fmt.Println(ans)
	}
}

func getDivisors(n int64) []int64 {
	var d []int64
	for i := int64(1); i*i <= n; i++ {
		if n%i == 0 {
			d = append(d, i)
			if i != n/i {
				d = append(d, n/i)
			}
		}
	}
	return d
}
```