提交时间:2025-10-18 14:16:52
运行 ID: 38644
#include<bits/extc++.h> using namespace std; using namespace __gnu_pbds; #define fls fflush(stdout) template<typename T> inline void read(T &x){x=0;char c=getchar();bool neg=0;while(!isdigit(c)){if(c=='-')neg=1;c=getchar();}while(isdigit(c))x=(x<<1)+(x<<3)+(c^48),c=getchar();if(neg)x=-x;} #define read2(a,b) read(a),read(b) #define read3(a,b,c) read2(a,b),read(c) #define read4(a,b,c,d) read3(a,b,c),read(d) #define read5(a,b,c,d,e) read4(a,b,c,d),read(e) #define read6(a,b,c,d,e,f) read5(a,b,c,d,e),read(f) int calc(int x,int y){ int l=0,r=y/x,mid; while(l<r){ mid=(l+r+1>>1); if(mid*mid*x<=y)l=mid; else r=mid-1; } x=l; l=0,r=x*x; while(l<r){ mid=(l+r+1>>1); if(mid*mid*mid*mid*mid*mid*mid<=x*x*x*x*x*x*x*x)l=mid; else r=mid-1; } return l; } int x,y; map<int,int>dis; set<int>vis; void slv(){ int ans=1; read(x),read(y); y/=x; auto it=dis.upper_bound(y); it--; printf("%d\n",it->second); } void dij(){ dis[1]=1; std::priority_queue<pair<int,int>>q; q.push({-1,1}); while(q.size()){ int p=q.top().second; q.pop(); if(vis.count(p))continue; vis.insert(p); for(int k=2;k<=54;k++){ if(p*k*k>1000000000)break; if(dis[p*k*k]<dis[p]*calc(1,k*k)){ dis[p*k*k]=dis[p]*calc(1,k*k); q.push({-dis[p*k*k],p*k*k}); } } } } signed main(){ dij(); int T;read(T);while(T--) slv(); return 0; }