using System; using System.Collections.Generic; using System.Linq; using System.Numerics; using static System.Console; using static System.Math; class Program { static void Main() { SetOut(new System.IO.StreamWriter(OpenStandardOutput()) { AutoFlush = false }); var n = FastIO.Long(); for (int i = 0; i < n; i++) { var x = FastIO.Long(); WriteLine(x.ToString() + " " + (MillerRabin(x) ? "1" : "0")); } Out.Flush(); } public static int[] b64 = new int[] { 2, 325, 9375, 28178, 450775, 9780504, 1795265022 };// n < at least 2^64 public static bool MillerRabin(long n) { if (n < 2) return false; if ((n & 1) == 0) return n == 2; var d = n - 1; var s = 0; while ((d & 1) == 0) { s++; d >>= 1; } for (int i = 0; i < b64.Length && b64[i] < n; i++) { var c = true;//このへんメソッド抽出すべきか したらアーリーリターンできるか var x = BigInteger.ModPow(b64[i], d, n); if (x == 1) c = false; for (int r = 0; r < s; r++) { if (x == n - 1) c = false; x = x * x % n; } if (c) return false; } return true; } } public static class FastIO { static System.IO.Stream str = System.Console.OpenStandardInput(); const int size = 1024; static byte[] buffer = new byte[size]; static int ptr = size; static byte Read() { if (ptr == size) { str.Read(buffer, 0, size); ptr = 0; } return buffer[ptr++]; } public static long Long() { var c = Read(); while (c < 0x21) { c = Read(); } var n = false; if (c == '-') { n = true; c = Read(); } var ret = 0L; while (c > 0x20) { ret = ret * 10 + c - '0'; c = Read(); } return n ? -ret : ret; } }