Untitled

 avatar
unknown
plain_text
10 months ago
4.9 kB
11
Indexable
/*
Created by chris144 on 8:13 AM, 9/4/2025
Problem Name: BAI1
Problem Link:
*/
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <time.h>
#include <algorithm>
#include <vector>
#include <queue>
#include <string.h>
#include <assert.h>
#include <map>
#include <math.h>
#include <functional>
#include <set>
#include <unordered_map>
#include <numeric>
#include <cstdlib>
#include <iomanip>
#include <bitset>
#include <complex>
#include <list>
#include <stack>
#include <deque>
#include <chrono>
#include <unordered_set>
#include <climits>
//#pragma GCC optimize("Ofast,03","unroll-loops")
//#pragma GCC target("avx2,popcnt,lzcnt,abm,bmi,bmi2,fma,tune=native,sse4")

using namespace std;

#define Chris "test"
#define FOR(i, a, b) for(int i = (a); i < (b); ++i)
#define FORD(i, a, b) for(int i = (a); i <= (b); ++i)
#define REP(i, a, b) for(int i = (a); i > (b); --i)
#define REPD(i, a, b) for(int i = (a); i >= (b); --i)
#define FORE(i, v) for(__typeof((v).begin()) i = (v).begin(); i != (v).end(); ++i)
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define MARK(i) (1LL << (i))
#define BIT(x, i) (((x) >> (i)) & 1)
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define emp emplace_back
#define fi first
#define se second
#define mp make_pair
#define Fill(v, x) fill(all((v)), (x))
#define Mem(v, a) memset((v), (a), sizeof((v)))
#define MINE(v) *min_element(all(v))
#define MAXE(v) *max_element(all(v))
#define el "\n"
#define MIN_HIGH(x, y) (high[x] < high[y] ? (x) : (y))
#define Chris_ signed main()
#define Faster ios::sync_with_stdio(false); cin.tie(nullptr);
#define showTime() cerr << '\n' << "Running time: " << (1.0 * clock() / CLOCKS_PER_SEC) << "s\n";
#define File(Chris) if(fopen(Chris".inp", "r")){freopen(Chris".inp", "r", stdin);freopen(Chris".out", "w", stdout);}

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, int> pli;
typedef pair<ll, ll> pll;
typedef set<int> sii;
typedef map<int, int> mii;
typedef stack<int> sti;
typedef deque<int> dqi;
typedef queue<int> quei;
typedef unordered_map<int, int> umii;
typedef unordered_set<int> umsii;
typedef vector<int> vii;
typedef vector<ll> vll;
typedef vector<vii> ivi;
typedef vector<vll> ivl;

template<class X, class Y>
bool maximize(X &x, const Y &y) {
    if (x < y) {
        x = y;
        return true;
    }
    else return false;
}

template<class X, class Y>
bool minimize(X &x, const Y &y) {
    if (x > y) {
        x = y;
        return true;
    } else return false;
}

static constexpr ll mod = 1e9 + 7;
static constexpr int inf = (int) 1e5 + 5;
static constexpr ll INF = (ll) 1e9;
static constexpr ld eps = 1e-8;
static constexpr ll NINF = (ll) -1e9;
static constexpr int MAXN = (int) 1e3;
static constexpr int LOG = (int) 20;
static constexpr int base1 = (int) 131;
static constexpr int base2 = (int) 91;
static constexpr ll m2 = 1LL * mod * mod;
static constexpr ll mod_pow(ll x, ll e, ll m) { ll r = 1; x %= m; while (e > 0) { if (e & 1) r = (r * x) % m; x = (x * x) % m; e >>= 1; } return r; }

#define plus(a, b, m) ((((a) % (m)) + ((b) % (m))) % (m))
#define minus(a, b, m) ((((a) % (m)) - ((b) % (m))) % (m))
#define mul(a, b, m) ((((a) % (m)) * ((b) % (m))) % (m))
#define divide(a,b,m) (((ll)(a) % (m)) * mod_pow((ll)(b), (m) - 2, (m)) % (m))

static constexpr int dx[4] = {-1, 1, 0, 0};
static constexpr int dy[4] = {0, 0, -1, 1};

//#define int long long

vector<ull> primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131};

int t;
ull n;
ull best_val;
ull best_cnt;

//max = 1e18 => exp max = 60 (2^60)
//x = (2 ^ e1) * (3 ^ e2) * (5 ^ e3) *... * (p ^ en)
//=> so luong uoc cua no la (e1 + 1) * (e2 + 1) * (e3 + 1) *... * (en + 1)
//=> backtracking so easy
void backtracking(int idx, int last_exp, ull cur_val, ull cur_cnt) {
    if (cur_cnt > best_cnt || (cur_cnt == best_cnt && cur_val > best_val)) {
        best_val = cur_val;
        best_cnt = cur_cnt;
    }
    ull val = cur_val;
    ull p = primes[idx];
    FORD(i, 1, last_exp) {
        val = val * p;
        if (val > n) break;
        ull new_cnt = (i + 1) * cur_cnt;
        backtracking(idx + 1, i, val, new_cnt);
    }
}

namespace Sub {

    void Inp() {
        cin >> t;
    }

    void Calc(){
        Inp();
        while (t--) {
            cin >> n;
            best_val = 1;
            best_cnt = 1;
            backtracking(0, 60, 1, 1);
            cout << best_val << " " << best_cnt << el;
        }
    }
}

void Solve() {
    Sub::Calc();
}

Chris_ {
    Faster
    File(Chris)

    Solve();

    showTime();

    return 0;
}
Editor is loading...
Leave a Comment