← Home
For problem statement at 2000-2999/2100-2199/2120-2129/2126/problemE.txt this is a correct solution, but verifier at 2000-2999/2100-2199/2120-2129/2126/verifierE.go ends with All tests passed can you fix the verifier? package main

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

func gcd(a, b int64) int64 {
	for b != 0 {
		a, b = b, a%b
	}
	return a
}

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

	var t int
	fmt.Fscan(in, &t)

	for tc := 0; tc < t; tc++ {
		var n int
		fmt.Fscan(in, &n)

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

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

		if p[n-1] != s[0] {
			fmt.Fprintln(out, "No")
			continue
		}

		possible := true
		for i := 0; i < n-1; i++ {
			if p[i]%p[i+1] != 0 {
				possible = false
				break
			}
			if s[i+1]%s[i] != 0 {
				possible = false
				break
			}
		}

		if !possible {
			fmt.Fprintln(out, "No")
			continue
		}

		for i := 1; i < n; i++ {
			B := p[i-1] / p[i]
			if B > 1 {
				A := s[i] / gcd(s[i], p[i])
				if gcd(A, B) > 1 {
					possible = false
					break
				}
			}
		}

		if !possible {
			fmt.Fprintln(out, "No")
			continue
		}

		for i := 0; i < n-1; i++ {
			B := s[i+1] / s[i]
			if B > 1 {
				A := p[i] / gcd(p[i], s[i])
				if gcd(A, B) > 1 {
					possible = false
					break
				}
			}
		}

		if possible {
			fmt.Fprintln(out, "Yes")
		} else {
			fmt.Fprintln(out, "No")
		}
	}
}

func main() {
	solve()
}