import java.util.Scanner;
import java.util.HashSet;
public class D {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean[] notGood = new boolean[350];
boolean[] investigated = new boolean[350];
int K = sc.nextInt();
investigated[1] = true;
l: for (int i = 2; i < 350; i++) {
if (investigated[i]) {
continue l;
}
int t = i;
HashSet<Integer> h = new HashSet<>();
//HashSet<Integer> hh = new HashSet<>();
while (!investigated[t]) {
//System.out.println(t);
investigated[t] = true;
h.add(t);
t = update(t);
}
if (notGood[t] || h.contains(t)) {
for (Integer s: h) {
notGood[s] = true;
}
}
}
/*
for (int i = 2; i < 350; i++) {
System.out.println(i + " " + notGood[i]);
}
*/
loop: while ( K > 0) {
K--;
int count = sc.nextInt();
int p = sc.nextInt();
if (p == 1) {
System.out.println(count + " " + p + " " + "NO");
continue loop;
}
for (int i = 2; i < (int)Math.pow(p, 0.5) + 1; i++) {
if (p % i == 0) {
System.out.println(count + " " + p + " " + "NO");
continue loop;
}
}
int cur = update(p);
if (notGood[cur]) {
System.out.println(count + " " + p + " " + "NO");
continue loop;
} else {
System.out.println(count + " " + p + " " + "YES");
continue loop;
}
}
}
public static int update(int cur) {
int sum = 0;
while (cur != 0) {
sum += (cur % 10) * (cur % 10);
cur = cur / 10;
}
return sum;
}
}