#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下降速度快,所以优先使用根号。

活动地址https://www.nowcoder.com/discuss/726480854079250432