For problem statement at 2000-2999/2000-2099/2020-2029/2029/problemE.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2020-2029/2029/verifierE.go ends with All 100 tests passed. can you fix the verifier? package main
import (
"bytes"
"io"
"os"
"strconv"
)
const M = 400000
func precompute() ([]int, []int) {
cnt := make([]int, M+2)
for d := 2; d*2 <= M; d++ {
for m := d * 2; m <= M; m += d {
cnt[m]++
}
}
start := make([]int, M+2)
for i := 1; i <= M+1; i++ {
start[i] = start[i-1] + cnt[i-1]
}
all := make([]int, start[M+1])
pos := make([]int, M+1)
copy(pos, start[:M+1])
for d := 2; d*2 <= M; d++ {
for m := d * 2; m <= M; m += d {
all[pos[m]] = d
pos[m]++
}
}
f := make([]int, M+1)
for y := 2; y <= M; y++ {
if cnt[y] == 0 {
f[y] = y
} else {
best := 0
for i := start[y]; i < start[y+1]; i++ {
v := f[y-all[i]]
if v > best {
best = v
}
}
f[y] = best
}
}
return cnt, f
}
func main() {
cnt, f := precompute()
data, _ := io.ReadAll(os.Stdin)
idx := 0
nextInt := func() int {
for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
idx++
}
val := 0
for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
val = val*10 + int(data[idx]-'0')
idx++
}
return val
}
t := nextInt()
var out bytes.Buffer
for ; t > 0; t-- {
n := nextInt()
a := make([]int, n)
prime := 0
bad := false
for i := 0; i < n; i++ {
x := nextInt()
a[i] = x
if cnt[x] == 0 {
if prime == 0 {
prime = x
} else {
bad = true
}
}
}
if bad {
out.WriteString("-1\n")
continue
}
if prime == 0 {
out.WriteString("2\n")
continue
}
ok := true
for _, x := range a {
if x == prime {
continue
}
if cnt[x] == 0 || f[x] < prime {
ok = false
break
}
}
if ok {
out.WriteString(strconv.Itoa(prime))
out.WriteByte('\n')
} else {
out.WriteString("-1\n")
}
}
os.Stdout.Write(out.Bytes())
}