← Home
For problem statement at 1000-1999/1500-1599/1510-1519/1513/problemD.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1510-1519/1513/verifierD.go ends with All tests passed. can you fix the verifier? ```go
package main

import (
	"bufio"
	"io"
	"os"
	"sort"
	"strconv"
)

type FastScanner struct {
	data []byte
	idx  int
	n    int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: data, n: len(data)}
}

func (fs *FastScanner) NextInt() int {
	for fs.idx < fs.n && (fs.data[fs.idx] < '0' || fs.data[fs.idx] > '9') {
		fs.idx++
	}
	val := 0
	for fs.idx < fs.n && fs.data[fs.idx] >= '0' && fs.data[fs.idx] <= '9' {
		val = val*10 + int(fs.data[fs.idx]-'0')
		fs.idx++
	}
	return val
}

func main() {
	fs := NewFastScanner()
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	t := fs.NextInt()
	for ; t > 0; t-- {
		n := fs.NextInt()
		p := fs.NextInt()

		a := make([]int, n)
		idxs := make([]int, n)
		for i := 0; i < n; i++ {
			a[i] = fs.NextInt()
			idxs[i] = i
		}

		sort.Slice(idxs, func(i, j int) bool {
			return a[idxs[i]] < a[idxs[j]]
		})

		used := make([]bool, n-1)
		ans := int64(n-1) * int64(p)

		for _, pos := range idxs {
			x := a[pos]
			if x >= p {
				break
			}

			for j := pos - 1; j >= 0; j-- {
				if used[j] || a[j]%x != 0 {
					break
				}
				used[j] = true
				ans += int64(x) - int64(p)
			}

			for j := pos; j < n-1; j++ {
				if used[j] || a[j+1]%x != 0 {
					break
				}
				used[j] = true
				ans += int64(x) - int64(p)
			}
		}

		out.WriteString(strconv.FormatInt(ans, 10))
		out.WriteByte('\n')
	}
}
```