← Home
For problem statement at 0-999/300-399/380-389/385/problemC.txt this is a correct solution, but verifier at 0-999/300-399/380-389/385/verifierC.go ends with All tests passed can you fix the verifier? ```go
package main

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

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

	const MAX = 10000010
	spf := make([]int, MAX+1)
	for i := 0; i <= MAX; i++ {
		spf[i] = i
	}
	for i := 2; i*i <= MAX; i++ {
		if spf[i] == i {
			for j := i * i; j <= MAX; j += i {
				if spf[j] == j {
					spf[j] = i
				}
			}
		}
	}

	var n int
	fmt.Fscan(in, &n)
	x := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &x[i])
	}

	freq := make(map[int]int)
	for _, xi := range x {
		freq[xi]++
	}

	f := make(map[int]int64)
	for v, fr := range freq {
		prs := getPrimes(v, spf)
		for _, p := range prs {
			f[p] += int64(fr)
		}
	}

	var primes []int
	for p := range f {
		primes = append(primes, p)
	}
	sort.Ints(primes)
	k := len(primes)

	val := make([]int64, k)
	for i := 0; i < k; i++ {
		val[i] = f[primes[i]]
	}

	prefix := make([]int64, k+1)
	for i := 1; i <= k; i++ {
		prefix[i] = prefix[i-1] + val[i-1]
	}

	var m int
	fmt.Fscan(in, &m)
	answers := make([]int64, m)
	for q := 0; q < m; q++ {
		var li, ri int
		fmt.Fscan(in, &li, &ri)
		a := max(li, 2)
		b := min(ri, 10000000)
		if a > b {
			answers[q] = 0
			continue
		}
		l := sort.SearchInts(primes, a)
		r := sort.SearchInts(primes, b+1) - 1
		if l > r {
			answers[q] = 0
		} else {
			answers[q] = prefix[r+1] - prefix[l]
		}
	}

	for _, ans := range answers {
		fmt.Fprintln(out, ans)
	}
}

func getPrimes(v int, spf []int) []int {
	primes := []int{}
	x := v
	for x > 1 {
		p := spf[x]
		primes = append(primes, p)
		for x%p == 0 {
			x /= p
		}
	}
	return primes
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}
```