#include <cmath> #include <iostream> using namespace std; int qmi(int a,int b){ int res = 1; while(b){ if(b&1){ res = res*a; } b>>=1; a*=a; } return res; } int main() { int t;cin>>t; while(t--){ int n,m;cin>>n>>m; int res2 = n-m; int res3 = n/2; int res1 = qmi(2,m); for(int i = 1;i<=m;i++){ if(n>=10){ n = ceil(sqrt(n)); } else if(n>=3){ int res2 = n-1; int res3 = (n+1)/2; int res1 = ceil(sqrt(n)); n = min(res1,min(res2,res3)); } else{ n = n-(m-i+1); break; } } cout<<n<<'\n'; } return 0; } // 64 位输出请用 printf("%lld")
就是考虑根号n和2分之n和n-1的大小关系,在n小于0时只有n-1只能使n减小,选择一个范围,由于根号n下降速度快,所以优先使用根号。