← Home
For problem statement at 1000-1999/1900-1999/1980-1989/1986/problemG1.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1980-1989/1986/verifierG1.go ends with All tests passed can you fix the verifier? package main

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

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

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

	var t int
	if _, err := fmt.Fscan(in, &t); err != nil {
		return
	}

	maxN := int32(100005)
	divs := make([][]int32, maxN)
	for i := int32(1); i < maxN; i++ {
		for j := i; j < maxN; j += i {
			divs[j] = append(divs[j], i)
		}
	}

	C := make([]map[int32]int32, maxN)
	modifiedX := make([]int32, 0, maxN)

	for tc := 0; tc < t; tc++ {
		var n int32
		fmt.Fscan(in, &n)

		modifiedX = modifiedX[:0]
		var ans int64

		for i := int32(1); i <= n; i++ {
			var p int32
			fmt.Fscan(in, &p)

			g := gcd(p, i)
			a := p / g
			b := i / g

			for _, d := range divs[a] {
				if m := C[d]; m != nil {
					if val, exists := m[b]; exists {
						ans += int64(val)
					}
				}
			}

			if C[b] == nil {
				C[b] = make(map[int32]int32)
			}
			if len(C[b]) == 0 {
				modifiedX = append(modifiedX, b)
			}
			for _, d := range divs[a] {
				C[b][d]++
			}
		}

		for _, x := range modifiedX {
			for k := range C[x] {
				delete(C[x], k)
			}
		}

		fmt.Fprintln(out, ans)
	}
}