#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define endl '\n' #define ALL(v) (v).begin(), (v).end() #define RALL(v) (v).rbegin(), (v).rend() #define UNIQ(v) (v).erase(unique((v).begin(), (v).end()), (v).end()) typedef long long ll; typedef long double ld; typedef __uint128_t uint128; typedef pair P; typedef complex comp; typedef vector< vector > matrix; struct pairhash { public: template size_t operator()(const pair &x) const { size_t seed = hash()(x.first); return hash()(x.second) + 0x9e3779b9 + (seed<<6) + (seed>>2); } }; const int inf = 1e9 + 9; const double eps = 1e-8; const double pi = acos(-1); int n; ll x[10000]; unsigned long xor128(void) { static unsigned long x=123456789,y=362436069,z=521288629,w=88675123; unsigned long t; t=(x^(x<<11));x=y;y=z;z=w; return( w=(w^(w>>19))^(t^(t>>8)) ); } // [a, b) uint128 rand(uint128 a, uint128 b) { return a + xor128() % (b - a); } bool is_prime(int n) { if (n == 1) return false; for (int i = 2; i * i <= n; i++) { if (n % i == 0) return false; } return true; } uint128 mod_pow(uint128 x, ll n, const uint128 mod) { uint128 res = 1; while (n > 0) { if (n & 1) res = (res * x) % mod; x = (x * x) % mod; n >>= 1; } return res; } bool miller_rabin(uint128 n) { if (n < 100) return is_prime(n); if (n % 2 == 0) return false; uint128 d = n - 1; while ((d & 1) == 0) { d >>= 1; } for (int k = 0; k < 30; k++) { uint128 a = rand(1, n); uint128 t = d; uint128 y = mod_pow(a, t, n); while (t != n-1 && y != 1 && y != n-1) { y = (y * y) % n; t <<= 1; } if (y != n-1 && (t & 1) == 0) { return false; } } return true; } void solve() { for (int i = 0; i < n; i++) { cout << x[i] << " " << (miller_rabin(x[i])?"1":"0") << endl; } } void input() { cin >> n; for (int i = 0; i < n; i++) cin >> x[i]; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout << fixed << setprecision(15); input(); solve(); }