# # 高速素数判定 # import random def Miller_Rabin_fast(n, k): if n==2: return True if n%2==0: return False s, d=0, n-1 while d%2==0: s, d=s+1, d//2 if n<4759123141: test=(2,7,61) for a in test: if a>n-1: continue check=[] check.append(pow(a, d, n)==1) for r in range(s): check.append(pow(a, pow(2, r)*d, n)==n-1) if True in check: continue else: return False return True elif n<=aa: test=(2,325,9375,28178,450775,9780504,1795265022) for a in test: if a>n-1: continue check=[] check.append(pow(a, d, n)==1) for r in range(s): check.append(pow(a, pow(2, r)*d, n)==n-1) if True in check: continue else: return False return True else: for _ in range(k): a=random.randint(1, n-1) check=[] check.append(pow(a, d, n)==1) for r in range(s): check.append(pow(a, pow(2, r)*d, n)==n-1) if True in check: continue else: return "composite" return "probably_prime" import random def is_prime(n): if n == 2: return True if n == 1 or n & 1 == 0: return False d = (n - 1) >> 1 while d & 1 == 0: d >>= 1 for k in range(8): a = random.randint(1, n - 1) t = d y = pow(a, t, n) while t != n - 1 and y != 1 and y != n - 1: y = (y * y) % n t <<= 1 if y != n - 1 and t & 1 == 0: return False return True _10=[10**i for i in range(43)] def ord_10(n): ok = 0 ng = 42 while abs(ok-ng)>1: mid=(ok+ng)//2 if n%_10[mid]==0: ok=mid else: ng=mid return ok aa=1<<64 T=int(input()) for _ in range(T): N=int(input()) Tar=N*N*N*N+4 if Tar<=aa: if Miller_Rabin_fast(Tar, 10): print("Yes") else: print("No") else: if is_prime(Tar): print("Yes") else: print("No") print(ord_10(Tar))