For problem statement at 2000-2999/2000-2099/2030-2039/2039/problemF1.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2030-2039/2039/verifierF1.go ends with wrong answer on test 1 case 3
input m=9
reference: 157
candidate: 165
exit status 1 can you fix the verifier? package main
import (
"bufio"
"io"
"os"
"strconv"
)
const MOD int64 = 998244353
func main() {
data, _ := io.ReadAll(os.Stdin)
p := 0
nextInt := func() int {
for p < len(data) && (data[p] < '0' || data[p] > '9') {
p++
}
x := 0
for p < len(data) && data[p] >= '0' && data[p] <= '9' {
x = x*10 + int(data[p]-'0')
p++
}
return x
}
t := nextInt()
ms := make([]int, t)
maxM := 0
for i := 0; i < t; i++ {
ms[i] = nextInt()
if ms[i] > maxM {
maxM = ms[i]
}
}
mu := make([]int, maxM+1)
if maxM >= 1 {
mu[1] = 1
}
primes := make([]int, 0)
comp := make([]bool, maxM+1)
for i := 2; i <= maxM; i++ {
if !comp[i] {
primes = append(primes, i)
mu[i] = -1
}
for _, pr := range primes {
v := i * pr
if v > maxM {
break
}
comp[v] = true
if i%pr == 0 {
mu[v] = 0
break
} else {
mu[v] = -mu[i]
}
}
}
divs := make([][]int, maxM+1)
for d := 1; d <= maxM; d++ {
for x := d; x <= maxM; x += d {
divs[x] = append(divs[x], d)
}
}
C := make([]int64, maxM+1)
Msum := make([]int64, maxM+1)
out := make([]byte, 0, t*16)
for _, m := range ms {
for i := 1; i <= m; i++ {
C[i] = 0
Msum[i] = 0
}
var ans int64 = 0
var tmp [256]int64
for u := m; u >= 1; u-- {
du := divs[u]
for i, g := range du {
r := u / g
var total int64 = 0
for _, d := range divs[r] {
if mu[d] == 1 {
total += Msum[g*d]
} else if mu[d] == -1 {
total -= Msum[g*d]
}
}
total -= C[g]
total %= MOD
if total < 0 {
total += MOD
}
val := (2 * total) % MOD
if g == u {
val++
if val >= MOD {
val -= MOD
}
}
tmp[i] = val
}
for i, g := range du {
val := tmp[i]
if val == 0 {
continue
}
C[g] += val
if C[g] >= MOD {
C[g] -= MOD
}
ans += val
if ans >= MOD {
ans -= MOD
}
for _, d := range divs[g] {
Msum[d] += val
if Msum[d] >= MOD {
Msum[d] -= MOD
}
}
}
}
out = strconv.AppendInt(out, ans, 10)
out = append(out, '\n')
}
w := bufio.NewWriterSize(os.Stdout, 1<<20)
w.Write(out)
w.Flush()
}