提交时间:2025-10-18 12:53:29

运行 ID: 38584

#include <algorithm> #include <cmath> #include <cstdio> using namespace std; using i64 = long long; constexpr int SQRT_EDGE = 54, MAX_EDGE = 3000; int main() { int q; scanf("%d", &q); int power[MAX_EDGE + 1]; for (int i = 1; i <= MAX_EDGE; ++i) power[i] = pow(i, 8.0 / 7); while (q-- > 0) { i64 x, y; scanf("%lld %lld", &x, &y); int ans = 1; auto dfs = [&](auto&& self, i64 cur, int len = 1, int step = 2) { if (cur > y) return; else if (cur * MAX_EDGE >= y) { ans = max(ans, len * power[int(sqrt(double(y) / cur))]); return; } else if (step == 0) return; for (int i = 2; i <= SQRT_EDGE && cur * i * i <= y; ++i) self(self, cur * i * i, len * power[i], step - 1); }; dfs(dfs, x); printf("%d\n", ans); } return 0; }