#include #ifdef DEBUG #include #else #define dump(...) ((void)0) #endif template bool chmin(T &a, const U &b){ return (a > b ? a = b, true : false); } template bool chmax(T &a, const U &b){ return (a < b ? a = b, true : false); } template void fill_array(T (&a)[N], const U &v){ std::fill((U*)a, (U*)(a + N), v); } template auto make_vector(const std::array &a, T value = T()){ static_assert(I >= 1); static_assert(N >= 1); if constexpr (I == 1){ return std::vector(a[N - I], value); }else{ return std::vector(a[N - I], make_vector(a, value)); } } template std::ostream& operator<<(std::ostream &s, const std::vector &a){ for(auto it = a.begin(); it != a.end(); ++it){ if(it != a.begin()) s << " "; s << *it; } return s; } template std::istream& operator>>(std::istream &s, std::vector &a){ for(auto &x : a) s >> x; return s; } namespace haar_lib { std::tuple ext_gcd(int64_t a, int64_t b){ if(b == 0) return std::make_tuple(a, 1, 0); int64_t d, p, q; std::tie(d, q, p) = ext_gcd(b, (a + b) % b); return std::make_tuple(d, p, q - a / b * p); } } namespace haar_lib { bool chinese_remainder_algorithm(int64_t b1, int64_t m1, int64_t b2, int64_t m2, int64_t &r, int64_t &m){ int64_t p, q, d; std::tie(d, p, q) = ext_gcd(m1, m2); if((b2 - b1) % d != 0) return false; m = m1 * m2 / d; int64_t t = ((b2 - b1) * p / d) % (m2 / d); r = (b1 + m1 * t + m) % m; return true; } bool chinese_remainder_algorithm(const std::vector &bs, const std::vector &ms, int64_t &r, int64_t &m){ int64_t R = 0, M = 1; for(int i = 0; i < (int)bs.size(); ++i){ if(not chinese_remainder_algorithm(R, M, bs[i], ms[i], r, m)) return false; R = r; M = m; } return true; } } namespace haar_lib { int64_t mod_pow(int64_t n, int64_t p, int64_t m){ int64_t ret = 1; while(p > 0){ if(p & 1) (ret *= n) %= m; (n *= n) %= m; p >>= 1; } return ret; } } namespace haar_lib {} namespace solver { using namespace haar_lib; constexpr int m1000000007 = 1000000007; constexpr int m998244353 = 998244353; void init(){ std::cin.tie(0); std::ios::sync_with_stdio(false); std::cout << std::fixed << std::setprecision(12); std::cerr << std::fixed << std::setprecision(12); std::cin.exceptions(std::ios_base::failbit); } void solve(){ int N; std::cin >> N; while(N--){ int64_t p; std::cin >> p; if(p == 2) std::cout << 2 << "\n"; else{ int64_t ans, m; chinese_remainder_algorithm(0, p - 1, 1, p, ans, m); dump(mod_pow(2, ans, p) == ans % p); std::cout << ans << "\n"; } } } } int main(){ solver::init(); while(true){ try{ solver::solve(); }catch(const std::istream::failure &e){ break; } } return 0; }