#include #include using namespace std; using namespace atcoder; // using mint = modint1000000007; // const int mod = 1000000007; using mint = modint998244353; const int mod = 998244353; // const int INF = 1e9; // const long long LINF = 1e18; #define rep(i, n) for (int i = 0; i < (n); ++i) #define rep2(i, l, r) for (int i = (l); i < (r); ++i) #define rrep(i, n) for (int i = (n)-1; i >= 0; --i) #define rrep2(i, l, r) for (int i = (r)-1; i >= (l); --i) #define all(x) (x).begin(), (x).end() #define allR(x) (x).rbegin(), (x).rend() #define P pair template inline bool chmax(A& a, const B& b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(A& a, const B& b) { if (a > b) { a = b; return true; } return false; } /** * @file math_util.hpp * @brief 数学関連の補助関数 * @author kwm_t * @see https://github.com/kwm-t/cp-library/blob/main/math/math_util.hpp */ #ifndef KWM_T_MATH_MATHUTIL_HPP #define KWM_T_MATH_MATHUTIL_HPP #include #include namespace kwm_t::math { // 約数の個数 inline long long divisor_count(long long n) { std::vector exponents; for (long long i = 2; i * i <= n; i++) { int count = 0; while (n % i == 0) { count++; n /= i; } if (count != 0) exponents.push_back(count); } if (n != 1) exponents.push_back(1); long long result = 1; for (long long e : exponents) { result *= (e + 1); } return result; } // 約数列挙 inline std::vector divisors(long long n) { std::vector result; for (long long i = 1; i * i <= n; i++) { if (n % i == 0) { result.push_back(i); if (i * i != n) result.push_back(n / i); } } std::sort(result.begin(), result.end()); return result; } // 素因数分解 inline std::vector> prime_factorize(long long n) { std::vector> result; for (long long i = 2; i * i <= n; i++) { int count = 0; while (n % i == 0) { count++; n /= i; } if (count != 0) result.emplace_back(i, count); } if (n != 1) result.emplace_back(n, 1); return result; } // オイラーのφ関数 inline long long euler_phi(long long n) { long long result = n; for (long long i = 2; i * i <= n; i++) { if (n % i == 0) { result -= result / i; while (n % i == 0) n /= i; } } if (n != 1) result -= result / n; return result; } // 二項係数愚直 template inline T binomial(long long n, long long k) { if (n < k || k < 0) return T(0); k = std::min(k, n - k); T numerator = 1; T denominator = 1; for (long long i = 1; i <= k; i++) { numerator *= T(n - k + i); denominator *= T(i); } numerator /= denominator; return numerator; } } // namespace kwm_t::math #endif // KWM_T_MATH_MATHUTIL_HPP int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); mapmp; { rep(a, 20)rep(b, 20)rep(c, 20) { rep(d, 20)rep(e, 20) { int x = a + b + c; int f = x - d - e; int g = x - a - d; int h = x - b - e; int i0 = x - c - f; int i1 = x - g - h; if (f < 0)continue; if (g < 0)continue; if (h < 0)continue; if (i0 < 0)continue; if (i1 < 0)continue; if (i0 != i1)continue; mp[a + b + c]++; } } } int t; cin >> t; while (t--) { int k; cin >> k; auto l = kwm_t::math::prime_factorize(k); mint ans = 1; for (auto [x, y] : l)ans *= mp[y]; cout << ans.val() << endl; } return 0; }