/** * author: otera **/ #include namespace otera { struct Eratos { public: Eratos() : Eratos(0) {} Eratos(int N) { init(N); } void init(int N) { _N = N; _primes.clear(); _isprime.assign(_N + 1, true); _min_factor.assign(_N + 1, -1); _isprime[0] = _isprime[1] = false; _min_factor[0] = 0, _min_factor[1] = 1; for (int i = 2; i <= _N; ++i) { if (!_isprime[i]) continue; _primes.push_back(i); _min_factor[i] = i; for (int j = i * 2; j <= _N; j += i) { _isprime[j] = false; if (_min_factor[j] == -1) _min_factor[j] = i; } } } bool isprime(int n) { assert(0 <= n and n <= _N); return _isprime[n]; } std::vector primes() { return _primes; } std::vector> prime_factors(int n) { std::vector> res; while (n != 1) { int prime = _min_factor[n]; int exp = 0; while (_min_factor[n] == prime) { ++exp; n /= prime; } res.push_back(std::make_pair(prime, exp)); } return res; } std::vector divisors(int n) { std::vector res({1}); auto pf = prime_factors(n); for (auto p :pf) { int n = (int)res.size(); for (int i = 0; i < n; ++i) { int v = 1; for (int j = 0; j < p.second; ++j) { v *= p.first; res.push_back(res[i] * v); } } } return res; } private: int _N; std::vector _primes; std::vector _isprime; std::vector _min_factor; }; } // namespace otera namespace otera{ template struct Rational { public: Rational() : Rational(0) {} Rational(T n) : num(n), den(1) {} Rational(T n, T d) { assert(d != 0); if(n == 0) num = 0, den = 1; else { T g = std::gcd(n, d); n /= g, d /= g; if (d < 0) n = -n, d = -d; num = n, den = d; } } T numerator() const { return num; } T denominator() const { return den; } int sgn() const { return -1 + (num >= 0) + (num > 0); } static int compare(const Rational &l, const Rational &r) { T g = std::abs(std::gcd(l.den, r.den)); T val = r.den / g * l.num - l.den / g * r.num; return -1 + (val >= 0) + (val > 0); } friend bool operator<(const Rational &l, const Rational &r) { return compare(l, r) < 0; } friend bool operator>(const Rational &l, const Rational &r) { return compare(l, r) > 0; } friend bool operator<=(const Rational &l, const Rational &r) { return compare(l, r) <= 0; } friend bool operator>=(const Rational &l, const Rational &r) { return compare(l, r) >= 0; } friend bool operator==(const Rational &l, const Rational &r) { return compare(l, r) == 0; } friend bool operator!=(const Rational &l, const Rational &r) { return compare(l, r) != 0; } Rational operator+() const { return *this; } Rational operator-() const { return Rational(-num, den); } friend Rational operator+(const Rational &l, const Rational &r) { T lcm = l.den / std::gcd(l.den, r.den) * r.den; lcm = std::abs(lcm); return Rational(l.num * (lcm / l.den) + r.num * (lcm / r.den), lcm); } friend Rational operator-(const Rational &l, const Rational &r) { T lcm = l.den / std::gcd(l.den, r.den) * r.den; lcm = std::abs(lcm); return Rational(l.num * (lcm / l.den) - r.num * (lcm / r.den), lcm); } friend Rational operator*(const Rational &l, const Rational &r) { T g1 = std::gcd(std::abs(l.num), std::abs(r.den)); g1 = std::abs(g1); T g2 = std::gcd(l.den, r.num); g2 = std::abs(g2); return Rational((l.num / g1) * (r.num / g2), (l.den / g2) * (r.den / g1)); } friend Rational operator/(const Rational &l, const Rational &r) { return l * r.inv(); } Rational& operator+=(const Rational &r) { *this = *this + r; return *this; } Rational& operator-=(const Rational &r) { *this = *this - r; return *this; } Rational& operator*=(const Rational &r) { *this = *this * r; return *this; } Rational& operator/=(const Rational &r) { *this = *this / r; return *this; } Rational& operator++() { num += den; return *this; } Rational& operator--() { num -= den; return *this; } Rational inv() const { return Rational(den, num); } Rational abs() const { return Rational(std::abs(num), den); } Rational pow(long long _n) const { if(!_n) return Rational(1); Rational res = pow(_n>>1); res *= res; if(_n & 1) res *= *this; return res; } explicit operator int() const { return (int)(num / den); } explicit operator long long() const { return (long long)(num / den); } explicit operator double() const { return (double)num / (double)den; } explicit operator long double() const { return (long double)num / (long double)den; } T floor() const { return num >= 0 ? num / den : -(-num / den); } T ceil() const { return num >= 0 ? -(-num / den) : num / den; } friend std::ostream &operator<<(std::ostream &os, const Rational &r) { return os << r.num << "/" << r.den; } private: T num, den; }; } template otera::Rational max(const otera::Rational &l, const otera::Rational &r) { return l > r ? l : r; } template otera::Rational min(const otera::Rational &l, const otera::Rational &r) { return l < r ? l : r; } using namespace std; #define int long long using ll = long long; using ld = long double; using ull = unsigned long long; using int128_t = __int128_t; #define repa(i, n) for(int i = 0; i < n; ++ i) #define repb(i, a, b) for(int i = a; i < b; ++ i) #define repc(i, a, b, c) for(int i = a; i < b; i += c) #define overload4(a, b, c, d, e, ...) e #define overload3(a, b, c, d, ...) d #define rep(...) overload4(__VA_ARGS__, repc, repb, repa)(__VA_ARGS__) #define rep1a(i, n) for(int i = 0; i <= n; ++ i) #define rep1b(i, a, b) for(int i = a; i <= b; ++ i) #define rep1c(i, a, b, c) for(int i = a; i <= b; i += c) #define rep1(...) overload4(__VA_ARGS__, rep1c, rep1b, rep1a)(__VA_ARGS__) #define rev_repa(i, n) for(int i=n-1;i>=0;i--) #define rev_repb(i, a, b) assert(a > b);for(int i=a;i>b;i--) #define rev_rep(...) overload3(__VA_ARGS__, rev_repb, rev_repa)(__VA_ARGS__) #define rev_rep1a(i, n) for(int i=n;i>=1;i--) #define rev_rep1b(i, a, b) assert(a >= b);for(int i=a;i>=b;i--) #define rev_rep1(...) overload3(__VA_ARGS__, rev_rep1b, rev_rep1a)(__VA_ARGS__) typedef pair P; typedef pair LP; #define pb push_back #define pf push_front #define ppb pop_back #define ppf pop_front #define eb emplace_back #define fr first #define sc second #define all(c) c.begin(),c.end() #define rall(c) c.rbegin(), c.rend() #define lb(c, x) distance((c).begin(), lower_bound(all(c), (x))) #define ub(c, x) distance((c).begin(), upper_bound(all(c), (x))) #define Sort(a) sort(all(a)) #define Rev(a) reverse(all(a)) #define Uniq(a) sort(all(a));a.erase(unique(all(a)),end(a)) #define si(c) (int)(c).size() inline ll popcnt(ull a){ return __builtin_popcountll(a); } #define kth_bit(x, k) ((x>>k)&1) #define unless(A) if(!(A)) ll intpow(ll a, ll b){ ll ans = 1; while(b){ if(b & 1) ans *= a; a *= a; b /= 2; } return ans; } ll intpow(ll a, ll b, ll m) {ll ans = 1; while(b){ if(b & 1) (ans *= a) %= m; (a *= a) %= m; b /= 2; } return ans; } template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } #define INT(...) int __VA_ARGS__;in(__VA_ARGS__) #define LL(...) ll __VA_ARGS__;in(__VA_ARGS__) #define ULL(...) ull __VA_ARGS__;in(__VA_ARGS__) #define STR(...) string __VA_ARGS__;in(__VA_ARGS__) #define CHR(...) char __VA_ARGS__;in(__VA_ARGS__) #define DBL(...) double __VA_ARGS__;in(__VA_ARGS__) #define LD(...) ld __VA_ARGS__;in(__VA_ARGS__) #define vec(type,name,...) vectorname(__VA_ARGS__) #define VEC(type,name,size) vectorname(size);in(name) #define vv(type,name,h,...) vector>name(h,vector(__VA_ARGS__)) #define VV(type,name,h,w) vector>name(h,vector(w));in(name) #define vvv(type,name,h,w,...) vector>>name(h,vector>(w,vector(__VA_ARGS__))) template using vc = vector; template using vvc = vector>; template using vvvc = vector>; template using vvvvc = vector>; template using pq = priority_queue; template using pqg = priority_queue, greater>; template using umap = unordered_map; template void scan(T& a){ cin >> a; } template void scan(vector& a){ for(auto&& i : a) scan(i); } void in(){} template void in(Head& head, Tail&... tail){ scan(head); in(tail...); } void print(){ cout << ' '; } template void print(const T& a){ cout << a; } template void print(const vector& a){ if(a.empty()) return; print(a[0]); for(auto i = a.begin(); ++i != a.end(); ){ cout << ' '; print(*i); } } int out(){ cout << '\n'; return 0; } template int out(const T& t){ print(t); cout << '\n'; return 0; } template int out(const Head& head, const Tail&... tail){ print(head); cout << ' '; out(tail...); return 0; } #define CHOOSE(a) CHOOSE2 a #define CHOOSE2(a0,a1,a2,a3,a4,x,...) x #define debug_1(x1) cout<<#x1<<": "<; const ll INF = 1LL<<60; void solve() { LL(x); for(int i = 2; i <= 40; ++ i) { rt val(1); for(auto [p, cnt]: er.prime_factors(i)) { int now = 0; ll _x = x; while(_x % p == 0) { _x /= p; ++ now; } val *= rt{now + cnt + 1, now + 1}; } debug(x, i, val); if(val == rt(2)) { ll y = x * i; out(y); return; } } } signed main() { er.init(1010); int testcase = 1; in(testcase); while(testcase--) solve(); return 0; }