For problem statement at 1000-1999/1900-1999/1950-1959/1957/problemE.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1950-1959/1957/verifierE.go ends with All 100 tests passed can you fix the verifier? package main
import (
"bufio"
"io"
"os"
"strconv"
)
const MOD int64 = 1000000007
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
nextInt := func() int {
for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
idx++
}
n := 0
for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
n = n*10 + int(data[idx]-'0')
idx++
}
return n
}
t := nextInt()
qs := make([]int, t)
maxN := 0
for i := 0; i < t; i++ {
qs[i] = nextInt()
if qs[i] > maxN {
maxN = qs[i]
}
}
ans := make([]int64, maxN+1)
if maxN >= 2 {
comp := make([]bool, maxN+1)
primes := make([]int, 0, 80000)
for i := 2; i <= maxN; i++ {
if !comp[i] {
primes = append(primes, i)
}
for _, p := range primes {
if i*p > maxN {
break
}
comp[i*p] = true
if i%p == 0 {
break
}
}
}
diff := make([]int64, maxN+3)
for _, p := range primes {
limit := maxN / p
for q := 1; q <= limit; q++ {
rem := q % p
if rem == 0 {
continue
}
v := p - rem
l := q * p
r := l + p - 1
if r > maxN {
r = maxN
}
diff[l] += int64(v)
diff[r+1] -= int64(v)
}
}
for q := 1; q*4 <= maxN; q += 2 {
l := q * 4
r := l + 3
if r > maxN {
r = maxN
}
diff[l] += 2
diff[r+1] -= 2
}
var cur, total int64
for i := 1; i <= maxN; i++ {
cur += diff[i]
total += cur
ans[i] = total % MOD
}
}
out := bufio.NewWriterSize(os.Stdout, 1<<20)
for _, n := range qs {
out.WriteString(strconv.FormatInt(ans[n], 10))
out.WriteByte('\n')
}
out.Flush()
}