def rfind(i): if T[i][0]==i: return i return rfind(T[i][0]) def runion(i,j): ri = rfind(i) rj = rfind(j) if ri==rj:return if T[ri][1]>=T[rj][1]: T[rj][0] = ri T[ri][1] += T[rj][1] else: T[ri][0] = rj T[rj][1] += T[ri][1] S = int(input()) for _ in range(S): N = int(input()) A = [0]+list(map(int,input().split())) B = [0]+list(map(int,input().split())) T = [[i,1] for i in range(N+1)] visited = [False for _ in range(N+1)] for i in range(2,N+1): if visited[i]:continue if i>2 and 2*i<=N: runion(2,i) for j in range(i*i,N+1,i): runion(i,j) col = [-1 for _ in range(N+1)] col[1] = 0 cnt = 1 for i in range(2,N+1): if col[i]>=0:continue ri = rfind(i) if col[ri]<0: col[ri] = cnt cnt += 1 col[i] = col[ri] C = {i:[] for i in range(cnt)} D = {i:[] for i in range(cnt)} for i in range(1,N+1): ri = rfind(i) C[col[ri]].append(A[i]) D[col[ri]].append(B[i]) flag = "Yes" for c in range(1,cnt): C[c] = sorted(C[c]) D[c] = sorted(D[c]) if C[c]!=D[c]: flag = "No" break print(flag)