Untitled
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