← Home
For problem statement at 1000-1999/1300-1399/1330-1339/1334/problemE.txt this is a correct solution, but verifier at 1000-1999/1300-1399/1330-1339/1334/verifierE.go ends with All tests passed can you fix the verifier? ```go
package main

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

const mod int64 = 998244353
const maxf = 100

var fact [maxf + 1]int64
var invfact [maxf + 1]int64

type primePower struct {
	p int64
	a int64
}

func modpow(a, b, m int64) int64 {
	res := int64(1)
	for b > 0 {
		if b&1 == 1 {
			res = res * a % m
		}
		a = a * a % m
		b >>= 1
	}
	return res
}

func factorize(d int64) []primePower {
	var res []primePower
	for i := int64(2); i*i <= d; i++ {
		if d%i == 0 {
			cnt := int64(0)
			for d%i == 0 {
				cnt++
				d /= i
			}
			res = append(res, primePower{i, cnt})
		}
	}
	if d > 1 {
		res = append(res, primePower{d, 1})
	}
	return res
}

func computeMulti(ds []int) int64 {
	if len(ds) == 0 {
		return 1
	}
	s := 0
	for _, d := range ds {
		s += d
	}
	res := fact[s]
	for _, d := range ds {
		res = res * invfact[d] % mod
	}
	return res
}

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

	fact[0] = 1
	for i := 1; i <= maxf; i++ {
		fact[i] = fact[i-1] * int64(i) % mod
	}
	for i := 0; i <= maxf; i++ {
		invfact[i] = modpow(fact[i], mod-2, mod)
	}

	var D int64
	fmt.Fscan(in, &D)
	factors := factorize(D)
	k := len(factors)

	var q int
	fmt.Fscan(in, &q)
	for qi := 0; qi < q; qi++ {
		var v, u int64
		fmt.Fscan(in, &v, &u)
		expv := make([]int, k)
		for i := 0; i < k; i++ {
			p := factors[i].p
			vv := v
			cnt := 0
			for vv%p == 0 && vv > 0 {
				vv /= p
				cnt++
			}
			expv[i] = cnt
		}
		expu := make([]int, k)
		for i := 0; i < k; i++ {
			p := factors[i].p
			uu := u
			cnt := 0
			for uu%p == 0 && uu > 0 {
				uu /= p
				cnt++
			}
			expu[i] = cnt
		}
		var dec []int
		var inc []int
		for i := 0; i < k; i++ {
			delta := expv[i] - expu[i]
			if delta > 0 {
				dec = append(dec, delta)
			} else if delta < 0 {
				inc = append(inc, -delta)
			}
		}
		waysd := computeMulti(dec)
		waysi := computeMulti(inc)
		ans := waysd * waysi % mod
		fmt.Fprintln(out, ans)
	}
}
```